快速排序
public class Qsort{
//使key后面的数组元素大于key,前面的元素小于key,最后返回key的下标
public static int cen(int a[],int start,int end) {
int key;
key=a[start];
while(start<end) {
while(start<end&&a[end]>=key)
end--;
if(start<end&&start!=end)
{
a[start]^=a[end];
a[end]^=a[start];
a[start]^=a[end];
}
while(start<end&&a[start]<=key)
start++;
if(start<end)
{
a[start]^=a[end];
a[end]^=a[start];
a[start]^=a[end];
}
}
a[start]=key;
return start;
}
public static void sort(int a[],int start,int end) {
int pos=0;
if(start<end) {
pos=cen( a,start,end);
sort(a,pos+1,end);//key左边递归同样的操作
sort(a,start,pos-1);//key右边递归同样的操作
}
}
public static void main(String args[]) {
int a[]=new int [] {1,9,7,3,4};
sort(a,0,a.length-1);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}
原理:随机选出一个元素,数组排序循环重排序,使得左边的数小于该元素,右边的数大于该元素。重排序之后,再把元素左边的子数组和右边的子数组重新按照上一步骤执行。

浙公网安备 33010602011771号