【发布时间】:2021-04-22 03:02:12
【问题描述】:
我尝试创建一个按升序排列数组元素的函数。但结果并不好。我想我忘记了一件事……谢谢你的帮助。
#include <stdio.h>
void ft_sort_int_tab(int *tab, int size) {
int i;
int j;
int temp;
size -= 1;
i = 0;
while (i < size) {
if (tab[i] > tab[i + 1]) {
temp = tab[i];
tab[i] = tab[i + 1];
tab[i + 1] = temp;
}
i++;
}
}
int main(void) {
int tab[9] = {9, 5, 2, 3, 8, 4, 16, 20, 24};
ft_sort_int_tab(tab, 9);
for (int i = 0; i < 9; i++) {
printf("%d ", tab[i]);
}
}
结果:5 2 3 8 4 9 16 20 24
【问题讨论】:
-
添加调试打印和/或使用调试器单步调试您的代码。 Stack Overflow 无法为您调试代码。
-
当你使用调试器时,程序做错的第一件事是什么?
-
这里
if (tab[i] > tab[i + 1]),if i == size-1,你有一个未定义的行为 -
@Damien
size在循环开始之前预减了1。因此,对于在函数中传递的原始大小值,运行到< size实际上是运行到< size-1。 -
您的排序不好,因为您忘记了外循环。这基本上是一种冒泡排序,但只有一次通过。它会让数字“更接近”他们所属的地方,甚至可能在他们最终的家中,但你的代码只会通过一次。
标签: arrays c sorting bubble-sort function-definition