刚学的快速排序于是自己试了试
但是遇到一个很奇怪的问题就是,数字小的能正常工作,数字大了(大概三位数开始)就会出错,更奇怪的是同样的样例多试几次之后又能正常工作了,我实在是找不着头脑
代码:
void exchange(int *a, int *b) {
//交换两个整形数组元素
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void qsort(int *list, int len) {
int position = -1;
int flag = list[len - 1];
if (len <= 1) {
return;
}
for (int i = 0; i < 5; i++) {
if (list[i] <= flag) {
position++;
if (position != i) {
exchange(list + position, list + i);
} else {
continue;
}
} else {
continue;
}
}
//递归
qsort(list, position);//左
qsort(list + position + 1, len - position - 1);//右
}
int main() {
int list[5];
while (1) {
printf("\n输入:");
for (int i = 0; i < 5; i++) {
scanf("%d", &list[i]);
}
printf("排序后:\n");
qsort(list, 5);
for (int i = 0; i < 5; i++) {
printf("%d ", list[i]);
}
}
system("pause");
return 0;
}
问题演示:
一两位数试了很多没出过错,但好像一旦出现三位数就可能发生这个问题
断点调试发现进入递归的时候有几率发生数组内容瞬间被修改,求解答!
第15行:for (int i = 0; i < 5; i++) 应改为:for (int i = 0; i < len; i++)