如何解决仅使用while循环的C中的反向冒泡排序算法
我正在尝试创建一个反向冒泡排序算法。它有效,但第一个输出是一个我不明白的疯狂数字。剩余的输出似乎按降序排序。我的代码哪里错了?
#include <stdio.h>
void ft_rev_int_tab(int *tab,int size)
{
int i;
int j;
int k;
i = 0;
while (i < size)
{
j = 0;
while (j < size -i)
{
if (tab[j] < tab[j+1])
{
k = tab[j];
tab[j] = tab[j+1];
tab[j + 1] = k;
}
j++;
}
i++;
}
}
int main(void)
{
int tab[] = {9,320,113,15};
int size = sizeof(tab) / sizeof(*tab);
ft_rev_int_tab(tab,size);
for (int i = 0; i < size; i++)
{
printf ("%d\n",tab[i]);
}
}
解决方法
i = 0;
之前的 while (i < size)
是错误的。当 j < size -i
为零时,条件 j < size
等效于 i
。在这种情况下,j
最多为 size-1
,现在 tab[j+1]
超出范围。
应该改为i = 1;
。
void ft_rev_int_tab(int *tab,int size) {
int i;
int j;
int k;
i = 0;
while (i < size) {
j = 0;
while (j < size - i - 1) {
if (tab[j] < tab[j + 1]) {
k = tab[j];
tab[j] = tab[j + 1];
tab[j + 1] = k;
}
j++;
}
i++;
}
}
您在嵌套 while 循环中的条件应为 (j < size - i - 1)
因为您只需要检查从 tab[0]
到 tab[i-1]
的值。您的 if 和 swap 检查 tab[j]
和 tab[j+1]
,因此当 i
等于数组的大小时,您会将其与数组外的值进行比较。在您的示例中是 tab[5]
的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。