分治---快速排序

来源:互联网 发布:淘宝短信营销作用大吗 编辑:程序博客网 时间:2024/06/03 03:55

数组排序任务可以如下完成:

1)设k=a[0], 将k挪到适当位置,使得比k小的元素都在k左边,比k大的元素都在k右边,和k相等的,不关心在k左右出现均可 (O(n)时间完成)

2) 把k左边的部分快速排序

3) 把k右边的部分快速排序

#include <iostream>using namespace std;void swap(int & a,int & b) //交换变量a,b值{int tmp = a;a = b;b = tmp;}void QuickSort(int a[],int s,int e){if( s >= e)return;int k = a[s];int i = s,j = e;while( i != j ){while( j > i && a[j] >= k )--j;swap(a[i],a[j]);while( i < j && a[i] <= k )++i;swap(a[i],a[j]);} //处理完后,a[i] = kQuickSort(a,s,i-1);QuickSort(a,i+1,e);}int a[] = { 93,27,30,2,8,12,2,8,30,89};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;}


0 0
原创粉丝点击