【排序算法】快速排序
排序算法 | 平均时间复杂度 |
---|---|
冒泡排序 | O(n2) |
选择排序 | O(n2) |
插入排序 | O(n2) |
希尔排序 | O(n1.5) |
快速排序 | O(N*logN) |
归并排序 | O(N*logN) |
堆排序 | O(N*logN) |
基数排序 | O(d(n+r)) |
快速排序:时间复杂度:O(nlogn)
快速排序是对冒泡排序的一种改进,采用分治的策略,其基本思想:
1.先从数列中取出一个数作为基准数;
2.将比这个数大的全放在右边,小于等于它的全放在左边;
3.再对左右区间分别重复进行第二步,直到各区间剩下一个数。
public static void quickSort(int a[],int l,int r){
if(l>=r)
return;
int i = l; int j = r; int key = a[l];//选择第一个数为key
while(i<j){
while(i<j && a[j]>=key)//从右向左找第一个小于key的值
j--;
if(i<j){
a[i] = a[j];
i++;
}
while(i<j && a[i]<key)//从左向右找第一个大于key的值
i++;
if(i<j){
a[j] = a[i];
j--;
}
}
//i == j
a[i] = key;
quickSort(a, l, i-1);//递归调用
quickSort(a, i+1, r);//递归调用
}
基准数可变,也可随机。
日期:2018/3/2-21:00