详解快速排序

快速排序是一个非常重要的算法,对于大数据的排序,效率上要比冒泡排序和插入排序这些算法高很多,所以是程序员必须掌握的算法
  • 算法的思路
    快速排序算法其实很简单,采用分治策略。步骤如下:
    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); /* 递归调用 */
   }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • quicksort可以说是应用最广泛的排序算法之一,它的基本思想是分治法,选择一个pivot(中轴点),将小于pi...
    黎景阳阅读 480评论 0 1
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,790评论 0 33
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,237评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,753评论 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,288评论 0 2