欢迎访问宙启技术站
智能推送

10个用Java函数实现的常见算法案例。

发布时间:2023-07-30 21:03:00

1. 冒泡排序算法:

冒泡排序算法是一种简单的排序算法,在每一轮比较相邻的两个元素,如果顺序错误就交换位置,直到所有元素都被排序。实现代码如下:

public static void bubbleSort(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                // 交换arr[j]和arr[j+1]
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

2. 快速排序算法:

快速排序算法是一种高效的排序算法,它使用了分治的思想,将数组分成两部分,一部分比基准元素小,一部分比基准元素大,然后再对这两部分进行递归排序。实现代码如下:

public static void quickSort(int[] arr, int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);
        quickSort(arr, low, pi-1);
        quickSort(arr, pi+1, high);
    }
}

private static int partition(int[] arr, int low, int high) {
    int pivot = arr[high];
    int i = low-1;

    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {
            i++;
            // 交换arr[i]和arr[j]
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    // 交换arr[i+1]和arr[high]
    int temp = arr[i+1];
    arr[i+1] = arr[high];
    arr[high] = temp;

    return i+1;
}

3. 插入排序算法:

插入排序算法是一种简单直观的排序算法,它通过构建有序序列,对未排序的元素进行逐个插入,从而得到一个有序的序列。实现代码如下:

public static void insertionSort(int[] arr) {
    int n = arr.length;
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i-1;

        while (j >= 0 && arr[j] > key) {
            arr[j+1] = arr[j];
            j--;
        }

        arr[j+1] = key;
    }
}

4. 归并排序算法:

归并排序算法是一种稳定的排序算法,它使用了分治的思想,将数组分成两部分,分别进行排序,然后再将两个有序序列归并成一个有序序列。实现代码如下:

public static void mergeSort(int[] arr, int left, int right) {
    if (left < right) {
        int mid = (left + right) / 2;
        mergeSort(arr, left, mid);
        mergeSort(arr, mid+1, right);
        merge(arr, left, mid, right);
    }
}

private static void merge(int[] arr, int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;

    int[] L = new int[n1];
    int[] R = new int[n2];

    for (int i = 0; i < n1; i++) {
        L[i] = arr[left + i];
    }

    for (int j = 0; j < n2; j++) {
        R[j] = arr[mid + 1 + j];
    }

    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) {
            arr[k] = L[i];
            i++;
        } else {
            arr[k] = R[j];
            j++;
        }
        k++;
    }

    while (i < n1) {
        arr[k] = L[i];
        i++;
        k++;
    }

    while (j < n2) {
        arr[k] = R[j];
        j++;
        k++;
    }
}

5. 二分查找算法:

二分查找算法是一种高效的查找算法,它要求待查找的数组是有序的。算法使用了分治的思想,将数组不断地二分,直到找到目标元素或确定目标元素不存在。实现代码如下:

public static int binarySearch(int[] arr, int target) {
    int left = 0;
    int right = arr.length - 1;

    while (left <= right) {
        int mid = left + (right - left) / 2;

        if (arr[mid] == target)
            return mid;

        if (arr[mid] < target)
            left = mid + 1;
        else
            right = mid - 1;
    }

    return -1;
}

6. 阶乘计算算法:

阶乘是指从1乘到一个正整数n的连续整数之积。实现代码如下:

public static int factorial(int n) {
    if (n == 0)
        return 1;

    return n * factorial(n-1);
}

7. 斐波那契数列算法:

斐波那契数列是指每个数字都是前两个数字之和的数列。实现代码如下:

public static int fibonacci(int n) {
    if (n <= 1)
        return n;

    return fibonacci(n-1) + fibonacci(n-2);
}

8. 线性查找算法:

线性查找算法是一种简单直观的查找算法,它按顺序逐个比较数组元素,直到找到目标元素或遍历完整个数组。实现代码如下:

public static int linearSearch(int[] arr, int target) {
    int n = arr.length;
    for (int i = 0; i < n; i++) {
        if (arr[i] == target)
            return i;
    }

    return -1;
}

9. 鸡尾酒排序算法:

鸡尾酒排序算法是冒泡排序算法的一种变种,它从两个方向交替进行冒泡,每轮中,先从左到右冒泡找到最大元素,再从右到左冒泡找到最小元素。实现代码如下:

public static void cocktailSort(int[] arr) {
    int n = arr.length;
    boolean swapped = true;
    int start = 0, end = n-1;

    while (swapped) {
        swapped = false;

        for (int i = start; i < end; i++) {
            if (arr[i] > arr[i+1]) {
                // 交换arr[i]和arr[i+1]
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
                swapped = true;
            }
        }

        if (!swapped)
            break;

        swapped = false;
        end--;

        for (int i = end-1; i >= start; i--) {
            if (arr[i] > arr[i+1]) {
                // 交换arr[i]和arr[i+1]
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
                swapped = true;
            }
        }

        start++;
    }
}

10. 矩阵转置算法:

矩阵转置是指将矩阵的行和列进行交换,得到一个新的矩阵。实现代码如下:

`java

public static int[][] transposeMatrix(int[][] matrix) {

int rows = matrix.length;

int cols = matrix[0].length;

int[][] transpose = new int[cols][rows];

for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {

transpose[j][i] = matrix