算法设计之快速排序的实现 (C++实现)
2014-08-21 11:54
661 查看
快速排序的算法设计思想是分治,其中最关键的部分在于分,选定一个元素作为主元,把比主元小的元素划分到一边,比主元大的元素划分到另一边,再在划分好的部分再次进行划分。划分的思路有两种,一种是从输入数组的两头向中间扫描,一种是设置两个索引从头开始一前一后向数组尾部扫描。我使用第二种方式划分数组。从我的描述中可以知道,整个排序过程是一个递归的过程。快速排序的过程和归并排序的过程类似,只是前者少了后者中用到的一步,也就是合并,因为,快速排序是原址排序,也就是说它是稳定排序,所以不需要合并。
// quicksort.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "iostream" void quicksort(int* ,int ,int ); int partition(int*,int,int); using namespace std; int main(){ int A[8]={2,8,7,1,3,5,6,4}; int p=0,r=7; quicksort(A,p,r); for(int i=0;i<=r;i++) cout<<A[i]<<","; cout<<endl; return 0; } void quicksort(int* A,int p,int r){ int q; if(p<r){ q=partition(A,p,r); quicksort(A,p,q-1); quicksort(A,q+1,r); } } int partition(int* A,int p,int r){ int x=A[r]; int i=p-1; for(int j=p;j<r;j++){ if(A[j]<x){ i+=1; int temp=A[j]; A[j]=A[i]; A[i]=temp; } } int temp=A[i+1]; A[i+1]=A[r]; A[r]=temp; return i+1; }
相关文章推荐
- 算法设计之快速排序的随机化版本 (C++实现)
- 【算法导论】c++实现的随机化的快速排序
- 算法设计--蛮力法&&分治法求最近对问题(C++实现)
- [算法导论] 快速排序以及最大堆的C++实现
- 【算法和数据结构】排序(四)归并排序和快速排序(C++实现)
- 基于C++的农夫过河问题算法设计与实现方法
- C++快速排序实现(quicksort) (算法导论)
- 古典密码算法的设计与实现(C++实现)
- 快速排序(快排)算法的C++两种实现
- 算法设计之堆的实现与堆排序实现(C++实现)
- 算法设计之计数排序 (C++实现)
- 初学算法-快速排序与线性时间选择(Deterministic Selection)的C++实现
- C++设计实现算法时易犯错误
- 算法设计、分析与实现 从入门到精通 C、C++和Java 这本书的堆实现85页C++语言实现有问题
- 算法设计与分析 快速排序的递归实现算法
- 算法设计之归并排序(C++实现)
- 算法设计之,堆,堆排序,基于最大堆的最大优先队列的实现(C++实现)
- 【算法导论】用C++实现快速排序
- C++ 快速排序实现(算法导论)
- 快速排序及其改进算法C++实现