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

实现Java函数快速排序算法

发布时间:2023-06-15 12:54:02

快速排序是一种常用的排序算法,它基于分治策略,可以在平均情况下达到O(n log n)的时间复杂度。快速排序的基本思想是,在待排序序列中选择一个关键字作为枢纽元,通过一趟排序将序列划分成两部分,使得枢纽元左边的元素都小于枢纽元,右边的元素都大于枢纽元。然后递归地对划分出的左右两个子序列进行排序,最终得到一个有序序列。

下面是实现Java函数快速排序算法的步骤:

1. 首先定义一个函数quickSort,它需要接收一个数组和数组的起始和结束下标。

2. 对于该数组中的一段区间,选择其中的任意一个元素作为枢纽元pivot。

3. 定义两个指针i和j,分别指向区间的起始位置和结束位置。

4. 将i指针从左向右移动,直到找到第一个大于或等于pivot的元素。

5. 将j指针从右向左移动,直到找到第一个小于或等于pivot的元素。

6. 如果i<j,则交换i和j指针所指向的元素。

7. 重复步骤4到6,直到i>=j。

8. 将pivot与j指针所指向的元素交换。

9. 对于划分出的左右两个子序列,分别递归调用quickSort函数进行排序。递归结束的条件是划分出的子序列长度为1或0。

下面是Java代码实现:

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

该函数接收一个整型数组,以及该数组的起始和结束下标。首先判断起始下标是否大于等于结束下标,如果是则返回。然后选择第一个元素作为枢纽元,并定义i和j指针,分别指向起始和结束位置。接着,依次移动i和j指针,找到第一个大于或等于pivot的元素和第一个小于或等于pivot的元素,如果i<j,则交换这两个元素。当i>=j时,将pivot与j指针所指的元素进行交换,使得pivot左边的元素都不大于pivot,右边的元素都不小于pivot。最后递归调用quickSort函数,分别对左右两个子序列进行排序,直到序列长度为1或0。

该算法具有较高的时间和空间效率,在实际应用中得到了广泛的应用。