6. 快速排序

Posted zhouzhiyao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6. 快速排序相关的知识,希望对你有一定的参考价值。

思想

快速排序,是选取一个元素,然后经过交换元素,保证选定元素的左边都小于它,右边元素都大于它。每次操作后,选定元素的位置就是排序后的位置。

就像多个人进行高矮个排列一样,你看了下,前面的人都比你矮,后面的人都比你高,那么你就可以不动了,随他们怎么折腾,反正你站的位置对了,他们排序好了,你也还是站在这个位置。

实现

import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args) {
        int[] nums = {5, 12, 5, 7, 1, 4, 7, 8, 9};
        quickSort(nums, 0, nums.length-1);
        System.out.println(Arrays.toString(nums));

    }

    public static void quickSort(int[] nums, int start, int end){
        if(start>=end) return ;
        int mid = partition(nums, start, end);
        quickSort(nums, start, mid-1);
        quickSort(nums, mid+1, end);
    }

    public static int partition(int[] nums, int start, int end){
        
        int p_value = nums[start];
        int i = start, j = end+1;
        while(true){
            while(nums[++i]<p_value) if(i>=end) break;
            while(nums[--j]>p_value) if(j<=start) break;
            if(i>=j) break;
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
        int temp = nums[j];
        nums[j] = nums[start];
        nums[start] = temp;
        return j;
    }
}

复杂度

快排的平均时间复杂度是NlogN。空间复杂度为O(1)

以上是关于6. 快速排序的主要内容,如果未能解决你的问题,请参考以下文章

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)

Java实现快速排序详细代码

Java算法——排序

快速排序-插入排序-归并排序

c#代码片段快速构建代码

数组排序代码,冒泡排序&快速排序&选择排序