QuickSort—MIT算法导论

https://github.com/yuanoOo/Algorithm/tree/master/SortAlgorithm/QuickSort

伪代码

  • ★PARTITION
PARTITION(A,p,r)
   x = A[r]   //将最后一个元素作为主元素
  i = p-1
   for j=p to r-1     //从第一个元素开始到倒数第二个元素结束,比较确定主元的位置
       do if A[j] <= x
             i = i+1
             exchange A[i] <-> A[j]
   exchange A[i+1]<->A[r]   //最终确定主元的位置
   return i+1   //返回主元的位置
  • QUICKSORT
QUICKSORT(A,p,r)
     if p<r
        q = PARTITION(A,p,r)    //确定划分位置
        QUICKSORT(A,p,q-1)     //子数组A[p...q-1]
        QUICKSORT(Q,q+1,r)     //子数组A[q+1...r]
  • 随机化版本
 RANDOMIZED-PARTITION(A,p,r)
    i = RANDOM(p,r)
    exchange A[r] <->A[i]
    return PARTITION(A,p,r)

code

#include<iostream>
using namespace std;

int partition(int *A, int low, int high);
void swap(int *a, int low, int high);
void quickSort(int *A, int low, int high);
void print(int *A, int low, int high);

int main()
{
    int A[] = {2, 6, 3, 10, 45, 12, 5, 6, 5, 6};
    quickSort(A, 0, 9);
    print(A,0,9);
}

//end:A中最后一个元素的index,非length of A 
int partition(int *A, int low, int high)
{
    //select the last element as position, position is not index
    int position = A[high];
    //在数组最开始的前面建立空间 
    int i = low - 1;
    
    for(int j = low; j < high; j++)
    {
        if(A[j] <= position)
        {
            ++i;
            swap(A, j, i); 
        }
    }
    
    swap(A, i+1, high);
    return i+1;
}

void quickSort(int *A, int low, int high)
{
    int q;
    if(low < high)
    {
        q = partition(A,low,high);
        quickSort(A, low, q - 1);
        quickSort(A, q + 1, high);
    }
}

void swap(int *a, int low, int high)
{
    int temp = a[low];
    a[low] = a[high];
    a[high] = temp;
}

void print(int *A, int low, int high)
{
    for(int i = low; i <= high; i++)
        cout<<A[i]<<"、"; 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,127评论 19 139
  • 如果没有遇见你,我只是一把静静立于角落的无人光顾的伞。看着人来人往, 常默默不得语,寂寞锁心间。 偶然一天,天突然...
    娜娜成长记阅读 1,217评论 0 2
  • 一直想找个地方说说我的故事,之前一直找各种理由犯懒,不知不觉竟已蹉跎岁月这么久。实在该写点什么了,思来想去,就暂且...
    安冉尘阅读 107评论 0 1
  • 前几天去太原培训,一路上我望着列车车窗外飞速掠过的土山,荒地,贫瘠的山村,心里渐渐滋生出些许亲近。是啊,离...
    流年不留念400阅读 206评论 0 1