首先快速排序:就是选择一个基数,然后从两端依次进行比较,若右边大于基数,则不进行交换,直到右边的数据小于基数,然后冲左边开始和基数比较,若左边的小于基数,则进行下一个比较,直到左边的数据大于基数才进行比较。循环的跳出条件是左边的数组号大于或者等于右边的数组号。
实例数组是: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=stand)high--; a[low]=a[high]; while(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
程序的运行结果如下所示: