您的位置:首页 > 其它

快速排序的认识

2017-07-21 15:58 162 查看
[align=center]认识快速排序
[/align]
概述:
快速排序是冒泡排序的升级,都属于交换类排序

简介:
快速排序是一种非常高效的排序算法。

它的实现,增大了记录的比较和移动的距离。将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少总的比较次数和移动次数,同时采用“分而治之”的思想。把大的拆分为小的,小的拆分为更小的。

操作:

对于给定的一组记录,选择一个基准元素,通常选择第一个元素和最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分,直到序列中所有的记录有序为止。

示例:

排序 4为基准
4 5 6 7 8 9 3 5

第一次(注意,开始比较的时候,方位都是从最后一个元素开始,当发起交换的时候,比较需要改变方位。)

4 5 6 7 8 9 35 (5比4大,移动指针,序列不变)
||
4 5 6 7 8 93 5 (3 比4小,3发起交换,且对面移动指针)
||
3
5 6 7 8 9 4 5 (5比4 大,5发起交换,且对面移动指针)
||
3
4 6 7 8 9 5 5 (9 比4大,移动指针,序列不变)
||
3
4 6 7 8 9 5 5 (8比4大,移动指针,序列不变)
||
3
4 6 7 8 9 5 5 (7比4大,移动指针,序列不变)
||
3
4 6 7 8 9 5 5 (6比4大,移动指针,序列不变)
第一次结束
分为两部分i-1,i+1(4所在的数组序号为1,所以i=1)
分为两部分{3}和{6 7 8 9 5 5}
{3 4}不必排序
下面需要第二次排序,排{6 7 8 9 5 5},以 6为基准
发起第二次排序
6 7 8 9 55( 5比6小,5 发起交换,对面移动指针)
||
5
7 8 9 5 6 ( 7比6大,7 发起交换,对面移动指针)
||
5
6 8 9 5 7( 5 比6 小,5发起交换,对面移动指针)
||
5 5
8 9 6 7(8比6 大,8发起交换,对面移动指针)
||
5 5
6 9 8 7 (9比6 大,移动指针)
||
5 5
6 9 8 7
第二次排序结束
发起第三次排序
分为两部分 {5 5 }和{ 9 8 7}
{5 5}不必排序
下面排序{ 9 8 7 } ,以9为基准
9 87 (7 小于9 ,7发起交换,对面移动指针)
||
7
8 9

(排序结束,据此,可以很快写出代码)

代码:
    public static void resultK(int[] a,int low,int high){

        int i=low;

        int j=high;

        if(low>=high){

            return ;

        }

        int index=a[i];

        int temp=0;

        while (i < j) {

            while(j>i&&a[j]>=index){//先从后面开始算

                j--;

            }

            if(i<j){

                temp=a[i];

                a[i++]=a[j];//先将a[j]的值赋给a[i],然后i自增1。

                a[j]=temp;

            }

            while(i<j&&a[i]<index){

                i++;

            }

            if(i<j){

                temp=a[j];

                a[j--]=a[i];

                a[i]=temp;

            }

        }  

        resultK(a,low,i-1);

        resultK(a,i+1,high);

    }
测试以及结果:

  int[] a= {4, 5, 6, 7, 8, 9, 3, 5};

         paiXu.resultK(a,0,a.length-1);

         System.out.println(Arrays.toString(a));

   打印:[3, 4, 5, 5, 6, 7, 8, 9]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: