【排序算法】快速排序

【排序算法】快速排序

排序算法平均时间复杂度
冒泡排序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

点赞