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

实现快速排序的java函数

发布时间:2023-06-10 05:57:47

快速排序是一种常见的排序算法,其时间复杂度为O(nlogn),实现起来比较简单,下面是一个java函数的实现。

public void quickSort(int[] arr, int left, int right){

    if (left >= right) { //边界条件

        return;

    }

    int i = left; //左指针

    int j = right; //右指针

    int tmp = arr[i]; //基准值

    while (i < j) {

        while (i < j && arr[j] >= tmp) { //从右往左找到第一个小于基准值的位置

            j--;

        }

        if (i < j) {

            arr[i] = arr[j]; //把该位置的元素赋值给左指针所在的位置

            i++;

        }

        while (i < j && arr[i] <= tmp) { //从左往右找到第一个大于基准值的位置

            i++;

        }

        if (i < j) {

            arr[j] = arr[i]; //把该位置的元素赋值给右指针所在的位置

            j--;

        }

    }

    arr[i] = tmp; //将基准值赋值到左右指针相遇的位置

    quickSort(arr, left, i - 1); //递归排序左边

    quickSort(arr, i + 1, right); //递归排序右边

}

该函数的参数包括要排序的数组以及要排序的区间,其中left和right分别是区间的左右边界。函数一开始会判断左右边界是否重合或者右边界小于左边界,如果是则直接返回。接着,函数会通过左右指针的移动,将数组分为两部分,左边的元素均小于等于基准值,右边的元素均大于等于基准值。最后,将基准值赋值到左右指针相遇的位置。

函数中采用递归方式分别对左、右两部分进行排序。递归结束的条件也很简单,即左右指针相遇或者左指针大于右指针。

在实际使用中,我们可以通过调用该函数来实现对数组的快速排序。比如,下面的示例代码会生成一个长度为10的随机数组,然后进行快速排序,并输出排序后的结果。

int[] arr = new int[10];

Random random = new Random();

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

    arr[i] = random.nextInt(100);

}

quickSort(arr, 0, arr.length-1);

for (int i = 0; i < arr.length; i++) {

    System.out.print(arr[i] + " ");

}

因为快速排序的时间复杂度为O(nlogn),因此在大规模数据的排序时,快速排序是一个比较有效的算法。