Bootstrap

手撕代码(一)快速排序

去美团面试,面试我的汪哥,感觉很有眼缘,人不错,只是自己功力不到,问了我在一般情况下的排序算法的效率问题,一般情况下排序算法的效率从高到低是这样的:快速排序>归并排序>堆排序>插入排序>冒泡排序,我在接下来的几天会把几种算法实现一下。实现我们来看快速排序算法。

快排在待排序数组基本有序的情况下是最糟的时间复杂度为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...   待续。。。

;