当我尝试运行程序时收到一条消息。为什么?
Segmentation fault
我的代码:
#include <stdio.h>
void sort_array(int *arr, int s);
int main() {
int arrx[] = { 6, 3, 6, 8, 4, 2, 5, 7 };
sort_array(arrx, 8);
for (int r = 0; r < 8; r++) {
printf("index[%d] = %d\n", r, arrx[r]);
}
return(0);
}
sort_array(int *arr, int s) {
int i, x, temp_x, temp;
x = 0;
i = s-1;
while (x < s) {
temp_x = x;
while (i >= 0) {
if (arr[x] > arr[i]) {
temp = arr[x];
arr[x] = arr[i];
arr[i] = temp;
x++;
}
i++;
}
x = temp_x + 1;
i = x;
}
}
我认为问题出在if
语句中。你觉得呢?为什么会这样呢?我想我是以积极的方式使用指向数组的指针的。
谢谢你!
3条答案
按热度按时间o3imoua41#
你程序中的这个循环
没有意义,因为
i
无条件增加。该程序可以如下所示
程序输出为
如果你希望排序函数只有一个while循环,那么你可以用下面的方法实现它
ugmeyewa2#
在内部循环中,将
i
递增到数组大小之外。您的算法应该要求您减少i
,但我不确定这是否足以修复排序算法。你应该首先尝试用一个
while
循环来实现 * 冒泡排序 *,在这个循环中,你可以比较相邻的项,并在每次交换它们时后退一步。2wnc66cl3#