数据结构之快速排序

首先快速排序:就是选择一个基数,然后从两端依次进行比较,若右边大于基数,则不进行交换,直到右边的数据小于基数,然后冲左边开始和基数比较,若左边的小于基数,则进行下一个比较,直到左边的数据大于基数才进行比较。循环的跳出条件是左边的数组号大于或者等于右边的数组号。

实例数组是:23  34 56 78 65 90 88 92 18 21
首先以23作为基数,则进行比较时,从右边开始,21和23比较,21小于23,所以,把21放到23的位置。结果为21  34 56 78 65 90 88 92 18 【】。
然后从左边开始和基数23比较,21小于23,向右移一位,low位+1,用34和23比较,发现34大于23,则把34放到上次移动后的位置【】,
这次交换后的排序结果是: 21  【】 56 78 65 90 88 92 18 34,
接着继续从右边开始比较,34大于23,向左移一位,high减一,使用18和23比较,18小于23,把18放到上次34移走后的位置,结果为: 21  18 56 78 65 90 88 92 【】 34,
接着再从左边开始进行比较,18小于23,56大于23,所以把56移位到上次18移走后的位置【】处,结果为:21  18 【】 78 65 90 88 92 56 34,
接着再从右边开始比较,发现56,92,88,90,65,78都比23大,比较完后没有需要移动的,且从左边开始比较的坐标和冲右边开始比较的坐标一样,两边碰面了,则这次比较就结束了,
最终把基数放到最后【】处的位置即可。
比较一次结束,可以唯一确定一个数据的最终位置,比如这次排序后,基数23的位置以确定了的,其他的数据属于待排状态,以基数为分界线,把基数两边的数据按照统一的规则进行排序,直到排序出最终结果位置。

快速排序的Java实现代码如下所示:

package com.class02;

/**
 * 快速排序:
 * @Date: 2019/3/23 9:55
 * @Version: 1.0
 */
public class QucikSortTest {
    static int a[] = {23,34,56,78,65,90,88,92,18,21};

    public static void Sort(int a[],int low,int high){
        int stand=0;
        if(low<0||high<0||low>high||low>=a.length)return;
        stand=getMid(a,low,high);
        if(low<high){
            Sort(a,stand+1,high);
            Sort(a,low,stand-1);
        }
    }

    public static int getMid(int a[],int low,int high){
        int stand=a[low];
        while(low<high){
            while(low<high&&a[high]>=stand)high--;
            a[low]=a[high];
            while(low<high&&a[low]<=stand)low++;
            a[high]=a[low];
        }
        a[low]=stand;
        show(a);
        return low;
    }

    public static void show(int a[]){
        for(int i=0;i<a.length;i++){
            System.out.print("  "+a[i]);
        }
        System.out.println();
    }

    public static  void main(String []args){
        System.out.println("排序前的数据序列为:");
        QucikSortTest.show(a);
        System.out.println("-----------------------------------------");
        QucikSortTest.Sort(QucikSortTest.a,0,9);
        System.out.println();
        System.out.println("排序后的数据序列为:");
        QucikSortTest.show(a);
    }
}

程序的运行结果如下所示:

原文地址:https://www.cnblogs.com/guopengxia0719/p/10582998.html