去美团面试,面试我的汪哥,感觉很有眼缘,人不错,只是自己功力不到,问了我在一般情况下的排序算法的效率问题,一般情况下排序算法的效率从高到低是这样的:快速排序>归并排序>堆排序>插入排序>冒泡排序,我在接下来的几天会把几种算法实现一下。实现我们来看快速排序算法。
快排在待排序数组基本有序的情况下是最糟的时间复杂度为O(n^2),一般情况下的平均复杂度为O(logn),快速排序算法的原理我就不介绍了,自己在纸上画画就可以啦,大家本科都学过数据结构,原理通晓,编码才会so easy。如果大家非要看原理百度百科,点这里,附带各种语言实现。话不多少,直接代码:
public class Sort{
public static void main(String[] args){
int[] arr = {4,3,6,1,5,2};
ksSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static void ksSort(int[] a,int low,int high){
if(low<high){
int mid = getMid(a,low,high);
ksSort(a,low,mid-1);
ksSort(a,mid+1,high);
}
}
private static int getMid(int[] a,int low,int high){
int base = a[low];
while(low!=high){
while(low<high&&a[high]>=base){
high--;
}
swap(a,low,high);
while(low<high&&a[low]<=base){
low++;
}
swap(a,low,high);
}
return a[low];
}
private static void swap(int[] a,int low,int high){
int temp = a[low];
a[low] = a[high];
a[high] = temp;
}
}
OVER... 待续。。。