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

原创 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 今天介绍快速排序,这也是在实际中最常用的一种排...

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

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

快速排序算法思想及实现

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

快速排序(基本思想以及算法实现)

1、引言 快速排序(QuickSort)是对冒泡排序的一种改进,正如它的名字所标识的,它是在实践中最快的已知排序算法,它的平均时间复杂度是O(N*logN),该算法之所以特别快,主要是由于非常精炼和...

<菜鸟学算法-A排序(分治的思想:快速排序)>

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的...

Java使用分治递归的思想实现快速排序

最近想探究一下算法方面的问题,闲着无聊就撸了一波快排的代码,以前都是直接拿过来用的,但是想想毕竟那是别人的东西,只有自己学会才算自己的,思路其实不难,只是需要好的处理一些细节问题,下面来说说思路和代码...

排序算法之快速排序的思想以及Java实现

1 基本思想 快速排序是在冒泡排序的基础上改进而来的,它是基于分治的思想。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分...

分治法——思想到使用——归并排序、快速排序

    分而治之。方法一般是利用递归。分治和递归一般同时出现。    分治模式在第一层递归上都有三个步骤:          分解(Divide):将原问题分解成一系列子问题;          解决...

算法与数据结构——快速排序

  • 2007年07月09日 20:18
  • 90KB
  • 下载

八大经典排序算法基本思想及代码实现(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,基数排序)

一.插入排序——简单插入排序基本思想:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。def insertSort(arr): if len(...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【算法】快速排序——基于分治思想的实现
举报原因:
原因补充:

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