快速排序:任选一记录作基准,其它记录与之比较,小于等于放基准前面;大于等于放基准后面。 一趟排序后,左子序列小于等于基准,右子序列大于等于基准。对两子序列进行同样处理,直至每组只有1个记录,全部记录有序
#include"stdio.h"
//单次排序
int quick_s(int *r, int p, int q)
{
int i, j;
i = p;
j = q;
r[0] = r[i];
while (i < j){
while (r[0] <= r[j]&&i<j) j--;
if (i < j)
{
r[i] = r[j];
i++;
}
while (i < j&&r[0] >= r[i]) i++;
r[j] = r[i];
}
r[i] = r[0];
return i;
}
void quick_a(int *r,int p,int q)
{
int i;
if (p >= q) return;
i = quick_s(r, p, q);
quick_a(r, p, i - 1);
quick_a(r,i+1,q);
}
void main()
{
int r[] = { 0, 49, 38, 65, 97, 76, 13, 27, 49 };
int i;
printf("排序前");
for (i = 1; i <= 8; i++)
{
printf("%d ", r[i]);
}
printf("\n");
printf("排序后");
quick_a(r, 1, 8);
for (i = 1; i <= 8; i++)
{
printf("%d ",r[i]);
}
printf("\n");
}