您的位置:首页 > 编程语言 > C语言/C++

C++快速排序

2015-08-07 16:11 369 查看
快速排序的平均时间复杂度为O(nlog2n),空间复杂度为O(n)。快速排序是一种不稳定的排序方法,适用于待排序记录个数很大且原始记录随机排序的情况。尽管快速排序的最坏时间为O(n^2),但其平均性能是迄今为止所有内排序算法中最好的一个。快速排序应用广泛,典型的应用是UNIX系统调用库函数例程中qsort函数。

快速排序算法思想:

1.分解:在R[left....right]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间,并使左边子区间中所有记录的关键字小于等于基准记录的关键字,右边子区间中所有记录的关键字大于等于基准记录的关键字,而基准记录位于正确位置上。

2.求解:通过递归调用快速排序对左、右子区间进行快速排序。

3.组合:在求解步骤中的两个递归调用结束后,其左、右两个子区间已有序。

下面给出已经调试成功的代码。

#include<iostream>
using namespace std;

void QuickSort(int a[],int left,int right){  //快速排序算法
if(left<right){
int i=left;
int j=right;
int x=a[i];
while(i<j){
while(i<j&&a[j]>x) --j; //右子区间大于基准时,j向左移动指针
if(i<j){
a[i]=a[j];     //右子区间小于基准时,移动该记录到左子区间,并且i向右移动一位
i++;
}
while(i<j&&a[i]<x) ++i;
if(i<j){
a[j]=a[i];
j--;
}
}
a[i]=x;
QuickSort(a,left,i-1);   //递归调用快速排序算法
QuickSort(a,i+1,right);
}
}

void main(){
int a[7]={23,13,49,6,31,19,28};
int i;
cout<<"Before sort:";
for(i=0;i<7;i++)
cout<<a[i]<<" ";
cout<<endl;
QuickSort(a,0,6);
cout<<"After  sort:";
for(i=0;i<7;i++)
cout<<a[i]<<" ";
cout<<endl;
}


运行结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: