快速排序
快速排序是对冒泡排序的改进,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录关键字都比另一部分关键字小,然后分别对这两部分记录继续排序,以达到整个序列有序。
任意选取一个数据(通常是第一个数)作为关键数据,然后将比他小的放前面,大的放后面。
class QuickSort{
public static void main(String [] args){
int[] a={47,12,64,33,45,87,25,53,79};
System.out.print("排序前:");
for(int num:a){
System.out.print(num+" ");
}
System.out.println(" ");
QSort(a,0,a.length-1);
System.out.print("排序后:");
for(int num:a){
System.out.print(num+" ");
}
}
public static int Partition(int[] a,int low,int high){
int key=a[low]; //用子表的第一个记录作枢纽记录关键数据
while(low<high){
while(low<high && key<=a[high]){
high--;
}
a[low]=a[high];
while(low<high && key>=a[low]){
low++;
}
a[high]=a[low];
} //从表的两端交替的向中间扫描
a[high]=key; //枢纽记录数据,此时high=low
return high; //返回枢纽位置
}
public static void QSort(int[] a,int low,int high){
if(low>=high){return ;}
int temp=Partition(a,low,high);
QSort(a,low,temp-1);
QSort(a,temp+1,high);
}
}
输出结果:
排序前:47 12 64 33 45 87 25 53 79
排序后:12 25 33 45 47 53 64 79 87