快速排序的思想:
①找一个关键值,把比它小的放在其左边,比它大的放右边
②通过刚刚的关键值已经把整个数组分层了两堆,左边的任意一个都比右边的任意一个值小,
接着重复步骤①,把两堆再分成四堆,四堆再分成八堆,直到完成排序
代码:
package 排序算法;
public class 快速排序 {
static int a[]={1,1,3,8,7,3,2,0,4,1};
//static int d=0;
public static void main(String[] args){
sort(0,a.length-1);
for(int e:a)
System.out.print(e);
}
public static void sort(int low,int high){
if(low>=high) //这个判断很重要 不然排好序后还会一直递归调用sort函数
return;
//记录当前分组的最左侧和最右侧
int left=low;
int right=high;
int key=a[low];//用于比较的关键值
int tmp;
while (low<high){
//把比关键字大的放右边
while (high>low&&a[high]>=key)
high--;
if(low<high){
tmp=a[low];
a[low]=a[high];
a[high]=tmp;
}
//把比关键字小的放左边
while (low<high&&a[low]<=key)
low++;
if(low<high){
tmp=a[low];
a[low]=a[high];
a[high]=tmp;
}
}
// System.out.print("第"+(++d)+"趟次:");
// for(int e:a)
// System.out.print(e);
// System.out.println();
//分成左右两组,继续比较
sort(left,high-1);
sort(high+1,right);
}
}