(已经解决了 自己太粗心了 谢谢大家)关于快速排序的问题
#include <stdio.h>#include <string.h>
void Swap(int *x, int *y)
{
int p;
p = *x;
*x = *y;
*y = p;
}
//将待排元素分为左右两段
int Partition(int *a, int p, int r)
{
int i = p, j = r+1;//i设置在开头 j设置到最后一个元素的后边
int t = 0;
int x = a[p];//x记录基本参考元素
//将<x的元素交换到左边 >x的交换到右边
while (1) {
while (a[++i] < x && i<r) //从左向右找到第一个大于x的元素停下来
;
while (a[--j] > x) //从右向左找到第一个小于x的元素停下来
;
if (i >= j) {//左游标大于等于右游标 整个数组都遍历了
break;
}
Swap(&a[i], &a[j]);//交换两个元素的位置
}
//整个数组遍历结束,将最左边的基准元素和右边游标j所在的元素交换
a[p] = a[j];
a[j] = x;
return j;//返回中间元素的脚标
}
void QuickSort(int *a, int p, int r)
{
if(p < r){//只要还可以分割
int q = Partition(a, p, r);
QuickSort(a, p, q-1);//对左半段排序
QuickSort(a, q+1, r);//对右半段排序
}
}
int main(void)
{
int a[8] = {9, 2, 5, 10, 25, 3, 6, 45};
int i = 0;
printf("test quicksort code:\n");
QuickSort(a, 0, sizeof(a)/sizeof(int)-1);
while (i < sizeof(a)/sizeof(int)) {
printf("%d ", a[i]);
}
printf("\n");
getchar();
return 0;
}
不知道错在哪里了 一运行就是死循环[color=#FF0000][/color]
[ 本帖最后由 Edwardwang03 于 2014-3-12 21:07 编辑 ]