快速排序原理:
设定一个分界值(这个分界值一般取第一个元素),通过分界值将数组分为左右两部分,将大于等于的数据放在右边、小于的数据放在左边。
左右两边都独立排序。重复以上步骤,各自再分成左右两组,再排序。当左右两边均完成时,整个数组就排序完成了。
时间复杂度
最有情况:O(n log n)
最坏情况:O()
代码示例:
public class Quick {
public static void main(String[] args) {
Integer[] a={4,5,1,3,2};
LianXi4.sort(a);
System.out.println(Arrays.toString(a));
}
public static void sort(Comparable[] a){
int start=0;
int end=a.length-1;
sort(a,start,end);
}
private static void sort(Comparable[] a,int start,int end){
if (start>=end){
return;
}
int partition=partition(a,start,end);
sort(a,start,partition-1);
sort(a,partition+1,end);
}
private static int partition(Comparable[] a,int start,int end){
Comparable key=a[start];
int left=start;
int right=end+1;
while (true){
while (key.compareTo(a[--right])<0){
if (right==start){
break;
}
}
while (a[++left].compareTo(key)<0){
if (left==end){
break;
}
}
if (left>=right){
break;
}else {
Comparable t=a[left];
a[left]=a[right];
a[right]=t;
}
}
Comparable t=a[start];
a[start]=a[right];
a[right]=t;
return right;
}
}