快速排序:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束。
快速排序的java代码:
public class fastSort {
public static int partition(int []array,int low,int high){
int key=array[low];
while(low<high){
while(array[high]>=key&&high>low){//从后半部分向前扫描
high--;
}
array[low]=array[high];
while(array[low]<=key&&high>low){//从前半部分向后扫描
low++;
}
array[high]=array[low];
}
array[high]=key;
return high;
}
public static void sort(int[] array,int low ,int high){
if(low>=high){
return ;
}
int index=partition(array,low,high);
sort(array,low,index-1);
sort(array,index+1,high);
}
public static void main(String[] args) {
int[] array={14,56,34,67,34,78,89,74,78,27};
sort(array,0,array.length-1);
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
}
结果如下图所示
快速排序最坏时间复杂度为O(n2),平均时间复杂度为O(nlogn)