#include "stdafx.h" #include <iostream> using namespace std; int RandomInRange(int start,int end); void Swap(int *p,int *q); int patition(int data[],int length,int start,int end) { if(data==NULL||length<=0||start<0||end>=length) throw new exception("Invalid Parameters"); int index=RandomInRange(start,end); Swap(&data[index],&data[end]); int small=start-1;//存储要交换的位置 for(index=start;index<end;index++) { if(data[index]<data[end]) { ++small; if(small!=index) Swap(&data[index],&data[small]); } } ++small; Swap(&data[small],&data[end]); return small; } int RandomInRange(int start,int end) { return start+rand()%(end-start); } void Swap(int *p,int *q) { int temp; temp=*p; *p=*q; *q=temp; } void QuickSort(int data[],int length,int start,int end) { if(start==end) return; int index=patition(data,length,start,end); if(index>start) QuickSort(data,length,start,index-1); if(index<end) QuickSort(data,length,index+1,end); } int _tmain(int argc, _TCHAR* argv[]) { int data[10]={1,4,7,0,6,10,3,8,2,9}; QuickSort(data,10,0,9); cout<<"After QuickSort:"<<endl; for(int i=0;i<10;i++) cout<<data[i] <<" "; cout<<endl; return 0; }
PS:在数组本身已经排好序,而每轮都是以最后一个数字作为比较标准,此时快速排序的效率只有O(n^2)