排序方法汇总(二)快速排序
2016-08-31 21:12
225 查看
快速排序使用了分治思想,分解为求 a(p..q-1)<a[q]<a(q+1) 的问题 + 分别递归a(p..q-1),a(q+1).
#include <iostream> using std::cout; // a[p..q-1]<a[q]<a[q+1..r]的形式 int partition(int *a,int p,int r) { //选a[r]为主元 int x=a[r]; int i=p-1,temp; for(int j=p;j<=r-1;j++) { //若a[j]小于主元,提到前面 if(a[j]<x) { i++; if(i!=j) {temp=a[i];a[i]=a[j];a[j]=temp;} } } //将主元放到小的和大的中间,返回主元位置 if(r!=i+1) {temp=a[r];a[r]=a[i+1];a[i+1]=temp;} return i+1; } void quicksort(int *a,int p,int r) { if(p<r) { //处理成 a[p..q-1]<a[q]<a[q+1..r]的形式 int q=partition(a,p,r); //递归处理a[p..q-1],a[q+1..r] quicksort(a,p,q-1); quicksort(a,q+1,r); } } int main() { int a[]={1,45,3,24,0,45}; for(int i=0;i<6;i++)cout<<a[i]<<" "; cout<<"\n"; quicksort(a,0,5); for(int i=0;i<6;i++)cout<<a[i]<<" "; cout<<"\n"; return 0; }
相关文章推荐
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
- 快速排序List的通用方法
- 我的C语言快速排序方法
- 算法入门-快速排序-基本快速排序方法
- 一看就懂的快速排序方法_java版
- list<T>.Sort()排序方法汇总
- 快速排序方法Java实现与分析
- 快速排序List的通用方法
- 五十音三天快速记忆方法汇总
- 排序的几种方法(合并,快速,冒泡排序)
- 排序方法汇总-JAVA实现
- 快速排序之按主元分块新方法(值得一看)
- 排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序...)
- 快速排序-几种不同的划分方法
- 快速排序{不同方法寻找分割元素}
- 快速排序List的通用方法
- 点击Ehlib列标题的快速排序方法---最新(转帖)
- 最容易理解的快速排序方法和程序
- 4、 排序有哪几种方法?请列举。并用JAVA实现一个快速排序.
- 【快速找回删除的文件的方法汇总】