详解快速排序

快速排序是一个非常重要的算法,对于大数据的排序,效率上要比冒泡排序和插入排序这些算法高很多,所以是程序员必须掌握的算法
  • 算法的思路
    快速排序算法其实很简单,采用分治策略。步骤如下:
    1. 选取一个基准元素(pivot)
    2. 比pivot小的放到pivot左边,比pivot大的放到pivot右边
    3. 对pivot左边的序列和右边的序列分别递归的执行步骤1和步骤2
  • 具体代码如下
/*
 * l:需要排序的左边界
 * r:需要排序的右边界
 * a:需要排序的数组 
 */
void quickSort(int *a, int l, int r)  {
    if (l < r)  {
        int i,j,x; 
        i = l;
        j = r;
        x = a[i];
        while (i < j) { 
             while(i < j && a[j] > x) {
                j--; // 从右向左找第一个小于x的数
             } 
             if(i < j)
             a[i++] = a[j]; //这里是i++所以是先赋值后自加
             while(i < j && a[i] < x) {
                i++; // 从左向右找第一个大于x的数
             }
             if(i < j)
             a[j--] = a[i];
         } 
    a[i] = x;
    quickSort(a, l, i-1); /* 递归调用 */
    quickSort(a, i+1, r); /* 递归调用 */
   }
}

你可能感兴趣的:(详解快速排序)