C++快速排序

来源:互联网 发布:c#修改浏览器数据 编辑:程序博客网 时间:2024/05/19 17:24

    快速排序的平均时间复杂度为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;}


运行结果为:

0 0
原创粉丝点击