欢迎访问宙启技术站

在Java中实现排序函数:快速排序、归并排序和插入排序

发布时间:2023-11-02 22:00:15

在Java中,实现排序函数可以使用快速排序、归并排序和插入排序算法。这些算法是常见的排序算法,可以在不同情况下提供高效的排序性能。

首先,我们来实现快速排序算法。

快速排序算法的基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据小,然后再按此方法对这两部分数据进行快速排序,整个过程可以递归进行,以此达到整个数据变成有序序列。

Java中的快速排序可以通过以下代码实现:

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);
    }
}
 
public 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++;
 
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
 
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
 
    return i + 1;
}

接下来,我们来实现归并排序算法。

归并排序是一种分治算法,它将待排序的数据序列划分成两个子序列,然后分别对这两个子序列进行递归排序,最后再将两个有序子序列合并为一个有序序列。

Java中的归并排序可以通过以下代码实现:

public static void mergeSort(int[] arr, int l, int r) {
    if (l < r) {
        int m = (l + r) / 2;
 
        mergeSort(arr, l, m);
        mergeSort(arr, m + 1, r);
 
        merge(arr, l, m, r);
    }
}
 
public static void merge(int[] arr, int l, int m, int r) {
    int n1 = m - l + 1;
    int n2 = r - m;
 
    int[] L = new int[n1];
    int[] R = new int[n2];
 
    for (int i = 0; i < n1; ++i) {
        L[i] = arr[l + i];
    }
    for (int j = 0; j < n2; ++j) {
        R[j] = arr[m + 1 + j];
    }
 
    int i = 0, j = 0;
    int k = l;
    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++;
    }
}

最后,让我们来实现插入排序算法。

插入排序算法的基本思想是将待排序的数据插入到已排序序列中的适当位置,从而形成一个新的有序序列。

Java中的插入排序可以通过以下代码实现:

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 = j - 1;
        }
        arr[j + 1] = key;
    }
}

以上就是在Java中实现快速排序、归并排序和插入排序的代码。这些排序算法都是常见的排序算法,可以根据具体需求选择使用其中一种来实现排序功能。注意,在使用这些排序算法时,需要先创建好待排序的数据数组,并将其作为参数传递给相应的排序函数。