/* *快速排序:1、设k=a[0],将k挪到适当位置,使得比k小的元素都在k左边,比k大的元素都在k右边, 和k相等的,不关心在k左右出现均可(0(n)时间完成) 2、把k左边的部分快速排序 3、把k右边的部分快速排序 */ #include <iostream> using namespace std; void swap(int & a,int & b) { int tmp; tmp= a; a = b; b = tmp; } void QuickSort(int a[],int s,int e) { if(s >= e)//如果要排的元素只有一个,什么也不做 return ; int k = a[s];//k为基准点 int i = s, j =e; while(i != j) { while(i < j && a[j] >= k) --j; swap(a[i],a[j]); while(i < j && a[i] <= k) ++i; swap(a[i],a[j]); }//处理完毕后,a[i] = k QuickSort(a,s,i-1);//把k左边的部分快速排序 QuickSort(a,i+1,e);//把k右边的部分快速排序 } int a[10] = {25,96,65,48,51,24,12,39,91,24}; int b[10]; int main() { int size = sizeof(a)/sizeof(int); QuickSort(a,0,size-1);//进行快速排序 for(int i= 0; i<size; ++i) { cout << a[i] << ","; } cout << endl; return 0; }
新闻热点
疑难解答