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

Java中如何进行数组排序?快速排序算法的实现方法详解

发布时间:2023-06-19 06:36:16

在Java中,可以使用Arrays.sort()方法对数组进行排序,排序方法有多种,其中比较常用的是快速排序算法。快速排序是一种分治法思想的排序算法,它是通过将一个大数组拆分成两个小数组来进行排序的。下面我们详细讲解一下快速排序算法的实现。

快速排序算法的基本思想:

1.通过一次排序将整个数组分成两个部分,其中一部分的所有元素小于另一部分。

2.分别对这两部分分别进行快速排序,递归实现。

因此,快速排序的实现过程如下:

1.取出一个数作为基准数

2.将数组中小于基准数的数放在它的左边,大于它的数放在右边

3.递归对左右两个部分进行重复操作,直到子数组长度小于等于1

代码实现:

//快速排序

public class QuickSort {

    public static void main(String[] args) {

        int[] nums = {3, 1, 6, 2, 8, 4, 5, 7}; //待排序数组

        quickSort(nums, 0, nums.length - 1);   //进行快速排序

        System.out.println(Arrays.toString(nums));  //输出排序后的数组

    }

    /**

     * 快速排序

     * @param nums 待排序数组

     * @param left 数组左下标

     * @param right 数组右下标

     */

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

        if (left < right) {  //递归终止条件

            int p = partition(nums, left, right); //按基准基准数分割数组

            quickSort(nums, left, p - 1); //递归左子数组

            quickSort(nums, p + 1, right); //递归右子数组

        }

    }

    /**

     * 分割数组

     * @param nums 待排序数组

     * @param left 数组左下标

     * @param right 数组右下标

     * @return 基准数最后的位置

     */

    public static int partition(int[] nums, int left, int right) {

        int pivot = nums[left]; //将数组 个值作为基准数

        int i = left, j = right; //i,j分别指向数组的左右两端

        while (i < j) {  //循环终止条件

            while (i < j && nums[j] >= pivot) {  //从右端开始向左扫描,直到发现一个小于基准数的数

                j--;

            }

            nums[i] = nums[j]; //将这个小的数赋值给左端

            while (i < j && nums[i] <= pivot) { //从左端开始向右扫描,直到发现一个大于基准数的数

                i++;

            }

            nums[j] = nums[i]; //将这个大的数赋值给右端

        }

        nums[i] = pivot; //将基准数赋值到最终的位置

        return i;  //返回基准数最终的位置

    }

}

运行结果:

[1, 2, 3, 4, 5, 6, 7, 8]

代码说明:

1.快速排序方法quickSort()和分割数组方法partition()都是使用递归实现的。

2.在分割数组的过程中,每一次循环都将基准数左边的元素都放在它的左边,右边的元素都放在它的右边。

3.最终将基准数放在它最终的位置上,保证了它左边的所有数都小于它,右边的所有数都大于它。

4.通过递归对每个子数组进行排序,最终得到有序的数组。

总结:

快速排序算法是一种时间复杂度为O(nlogn)的排序算法,它不需要额外的存储空间。快速排序算法在各种实际应用场景中被广泛使用,例如基于比较的排序、外部排序、模糊查找等。当需要处理大规模数据的时候,快速排序算法是一种非常有效的选择。