#include<cstdio>
#include<algorithm>
using namespace std;
int Partition(int a[], int s, int t) //划分算法
{
int i = s, j = t;
int tmp = a[s]; //用序列的第1个记录作为基准
while (i != j) //从序列两端交替向中间扫描,直至i=j为止
{
while (j > i && a[j] >= tmp)
j--; //从右向左扫描,找第1个关键字小于tmp的a[j]
a[i] = a[j]; //将a[j]前移到a[i]的位置
while (i < j && a[i] <= tmp)
i++; //从左向右扫描,找第1个关键字大于tmp的a[i]
a[j] = a[i]; //将a[i]后移到a[j]的位置
}
a[i] = tmp;
return i;
}
void QuickSort(int a[], int s, int t) //对a[s..t]元素序列进行递增排序
{
if (s < t) //序列内至少存在2个元素的情况
{
int i = Partition(a, s, t);
QuickSort(a, s, i-1); //对左子序列递归排序
QuickSort(a, i+1, t); //对右子序列递归排序
}
}
int main()
{
int a[] = {1,3,5,7,6,2,4,8,10,9};
int length = sizeof(a) / sizeof(int); //计算出数组的长度 -- sizeof计算的是字节长度
QuickSort(a, 0, length);
for(int i = 0; i < length; i++)
{
printf("%d%c",a[i], i == length-1?'\n':' ');
}
return 0;
}
递归与分治--快速排序
猜你喜欢
转载自blog.csdn.net/tian_he_he/article/details/85992155
今日推荐
周排行