首页 > 编程语言 > 详细

【算法】快速排序

时间:2020-04-02 12:41:34      阅读:53      评论:0      收藏:0      [点我收藏+]

注意点

  • 分治思想、递归思想
  • 时间复杂度O(nlogn),适合大规模数据排序
  • 在数组中 找一个分区点,把数据分隔成两区间,一部分小于分区点,一部分大于分区点,然后递归处理分隔后的连个小的区间。
  • 原地排序,不占用太多额外空间
package algorithm.sort;

import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {11,6,8,2,1,4,13};
        sort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    private static void sort(int[] arr,int head,int tail) {
        if(head > tail) return;

        int q = partition(arr,head, tail);

        sort(arr,head,q-1);
        sort(arr,q+1,tail);
    }

    /**
     * 分区,根据分区点,把数据分成两半
     * @param arr
     * @param head
     * @param tail
     * @return
     */
    private static int partition(int[] arr,int head,int tail){
        int pivot = arr[tail];//分区点
        int i = head;
        for(int j=head;j<=tail-1;j++) {
            if(arr[j] < pivot) {
                //swap arr[i] with arr[j]
                int tmp = arr[j];
                arr[j] = arr[i];
                arr[i] = tmp;
                i++;
            }
        }
        //swap arr[i] with arr[tail]
        arr[tail] = arr[i];
        arr[i] = pivot;
        return i;
    }

}

【算法】快速排序

原文:https://www.cnblogs.com/zendwang/p/algorithm-quick-sort.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!