C++快速排序

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


运行结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值