【算法】快速排序——基于分治思想的实现

原创 2016年08月30日 14:39:48

今天看了《算法导论》的快排部分,又更加理解了这个算法

现在将它实现了,以后就直接用了


#include <iostream>

using namespace std;

// 这个函数的作用是将数组a从下标p到r这部分进行一个划分
// 将a[r]放到合理的位置(下标q处),使得 任意 p<=i<q:a[i]<=a[q]
// 任意 q < i <= r: a[i] >= a[q]
int partition ( int* a, int p, int r ) {
    int x = a[r];
    int i = p - 1;
    int temp;

    for ( int j = p; j <= r - 1; ++j ) {

        if ( a[j] <= x ) {
            i++;
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
    }

    a[r] = a[i+1];
    a[i+1] = x;

    return i+1;
}

// 将数组a[p...r]从小到大排序
void quick_sort ( int* a, int p, int r ) {

    if ( p < r ) {
        int q = partition(a,p,r);
        quick_sort(a,p,q-1);
        quick_sort(a,q+1,r);
    }
}

int main()
{
   int a[] = {2,8,7,1,1,5,6,4};
   int len = sizeof(a)/sizeof(int);

   quick_sort(a,0, len-1);

   for( int i = 0; i < len; ++i ) {
        cout << a[i] << " ";
   }



}



版权声明:本文为博主原创文章,未经博主允许不得转载。

快速排序算法-分治思想

以下内容全部转载自:http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html 今天介绍快速排序,这也是在实际中最常用的一种排...
  • baidu_20363843
  • baidu_20363843
  • 2015年11月16日 12:19
  • 1656

排序算法(三)--关于快速排序Partition的思考

上一章我们讲解了快速排序,其中快速排序一趟划分的算法Partition.Partition可不只用在快速排序中,还可Selection algorithm(在无序数组中寻找第K大的值)中.甚至有可能正...
  • mfcbest
  • mfcbest
  • 2016年10月09日 15:30
  • 1423

排序算法系列:快速排序算法

本文就来说说交换排序的最后一拍:快速排序算法。本文就其原理、过程及实现几个方面讲解一下快速排序算法。...
  • u013761665
  • u013761665
  • 2016年03月01日 15:40
  • 22803

快速排序算法的思想和几种实现方式

快速排序算法是基于分治策略的另一个排序算法。 该方法的基本思想是: 1.先从数列中取出一个数作为基准数,记为x。 2.分区过程,将不小于x的数全放到它的右边,不大于x的数全放到它的左边。(这样key的...
  • man_sion
  • man_sion
  • 2017年04月12日 08:43
  • 2280

算法之分治思想和快速排序

关于快速排序这个算法,看了很多次了,但是经常自己写的时候就会出现一些小错误,算法的思想还是很清楚的,就是写不对。记录下来已备看。         前两天的时候做算法课的实验,实验的题目是,利用分治的策...
  • mhc9348
  • mhc9348
  • 2015年04月09日 13:29
  • 344

常用算法思想之:分治思想

常用算法思想之:分治思想
  • wangyanming123
  • wangyanming123
  • 2016年07月22日 21:47
  • 335

快速排序算法的深入分析 -- 十二 July

十二之续、快速排序算法的深入分析                                         作者:July   二零一一年二月二十七日 -----...
  • moubenmao
  • moubenmao
  • 2013年08月12日 00:06
  • 1909

Java实现常见的排序算法之快排(快速排序)

快速排序算法是也,笔试面试中常被拿来做为问题,要求写出其实现过程和思想...
  • u011437847
  • u011437847
  • 2016年05月12日 11:03
  • 5535

算法的领悟(上):分治思想

5分治思想与递归(上)我们可以下一个不太严谨的论断,枚举是算法思想的最本源,任何算法问题不是都可以认为是寻找解吗?对枚举进行精化和特化的回溯和分支限界思想,在操作上表现为对解空间的搜索;分治思想(Di...
  • fairyroad
  • fairyroad
  • 2010年05月20日 09:36
  • 3483

用函数指针实现的快速排序算法

K&R第五章介绍了用函数指针实现的快速排序算法,对其中的代码比较困惑,所以看了下《算法导论》上对快排的介绍,下面这张图说明了快排的原理及过程: 用C实现上面的过程: #include /*...
  • wusuopuBUPT
  • wusuopuBUPT
  • 2014年09月17日 20:47
  • 2155
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【算法】快速排序——基于分治思想的实现
举报原因:
原因补充:

(最多只允许输入30个字)