-----------------------------------------------------------Sun---------------------------------------------------------------------------
此快速排序采用分治策略。
1.分解:以某元素为分点,分为小于此分点的值,大于此分点的值。
2.递归求解:递归调用排序算法进行排序
3.合并:合并,已排好直接放入即可。
代码:
结果为 0 1 2 3 4 5 9 8 7 6
#include <stdio.h>
#include <stdlib.h>
#define n 10
void swap(int *a,int *b);
void Qsort(int a[],int s,int e);
int Part(int a[],int s,int e);
int main()
{
int a[10]={9,8,7,6,5,4,3,2,1,0};
int i;
Qsort(a,0,5); //以a[5]为分点
for(i=0;i < n;i++)
{
printf("%3d",a[i]);
}
return 0;
}
void Qsort(int a[],int s,int e)
{
if(s < e)
{
int m = Part(a,s,e);
Qsort(a,s,m-1);
Qsort(a,s,m-1);
}
}
int Part(int a[],int s,int e)
{
if(s < e)
{
int temp = a[e];
int j,i = s-1;
for(j = s;j < n;j++)
{
if(a[j] < temp){
i++;
swap(&a[i],&a[j]);
}
}
swap(&a[i+1],&a[e]);
return i+1;
}
return 0;
}
void swap(int *a,int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}