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

Java函数的排序算法实现

发布时间:2023-12-07 23:43:14

Java中的排序算法是对一组数据按照一定规则进行排序的算法。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。

冒泡排序是一种基本的排序算法,其思想是从数组的第一个元素开始,依次比较相邻的两个元素,若顺序不对则交换位置,直至整个数组有序。具体实现如下:

public static void bubbleSort(int[] array) {
    if (array == null || array.length == 0) {
        return;
    }
    int n = array.length;
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-1-i; j++) {
            if (array[j] > array[j+1]) {
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
}

选择排序的思想是每次从未排序的部分选择最小的元素,放到已排序部分的末尾。具体实现如下:

public static void selectionSort(int[] array) {
    if (array == null || array.length == 0) {
        return;
    }
    int n = array.length;
    for (int i = 0; i < n-1; i++) {
        int minIndex = i;
        for (int j = i+1; j < n; j++) {
            if (array[j] < array[minIndex]) {
                minIndex = j;
            }
        }
        if (minIndex != i) {
            int temp = array[i];
            array[i] = array[minIndex];
            array[minIndex] = temp;
        }
    }
}

插入排序的思想是将未排序的元素插入已排序部分的正确位置。具体实现如下:

public static void insertionSort(int[] array) {
    if (array == null || array.length == 0) {
        return;
    }
    int n = array.length;
    for (int i = 1; i < n; i++) {
        int current = array[i];
        int j = i-1;
        while (j >= 0 && array[j] > current) {
            array[j+1] = array[j];
            j--;
        }
        array[j+1] = current;
    }
}

快速排序是一种分治的排序算法,其递归地将数组分为较小和较大的两个子数组,分别对两个子数组进行排序。具体实现如下:

public static void quickSort(int[] array, int start, int end) {
    if (start >= end) {
        return;
    }
    int pivot = array[start];
    int i = start, j = end;
    while (i < j) {
        while (i < j && array[j] >= pivot) {
            j--;
        }
        if (i < j) {
            array[i] = array[j];
            i++;
        }
        while (i < j && array[i] < pivot) {
            i++;
        }
        if (i < j) {
            array[j] = array[i];
            j--;
        }
    }
    array[i] = pivot;
    quickSort(array, start, i-1);
    quickSort(array, i+1, end);
}

归并排序是将数组分成两个子数组,分别进行排序,然后将排好序的子数组再合并成一个有序数组。具体实现如下:

public static void mergeSort(int[] array, int start, int end) {
    if (start >= end) {
        return;
    }
    int mid = (start + end) / 2;
    mergeSort(array, start, mid);
    mergeSort(array, mid+1, end);
    merge(array, start, mid, end);
}

public static void merge(int[] array, int start, int mid, int end) {
    int[] temp = new int[end-start+1];
    int i = start, j = mid+1, k = 0;
    while (i <= mid && j <= end) {
        if (array[i] <= array[j]) {
            temp[k++] = array[i++];
        } else {
            temp[k++] = array[j++];
        }
    }
    while (i <= mid) {
        temp[k++] = array[i++];
    }
    while (j <= end) {
        temp[k++] = array[j++];
    }
    for (i = 0; i < temp.length; i++) {
        array[start+i] = temp[i];
    }
}

以上就是几种常见的排序算法在Java中的实现。不同的排序算法适用于不同的场景,选择合适的排序算法可以提高排序效率。在实际应用中,还可以根据具体需求对排序算法进行优化,进一步提高排序效率。