我创建了一个使用嵌套for的插入排序代码。只是因为我在for循环中单独编写if部分的条件,它会给我不同的答案。请告诉我我的方法有什么问题。
我试着在网上搜索,但我没有得到结果,这是我的代码:
#include <stdio.h>
int main() {
int i, j;
int arr[] = {32, 5, 45, 8, 17, 82, 10};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Before Sorting: ");
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
for (i = 1; i < size; i++) {
int key = arr[i];
for (j = i - 1; j >= 0; j--)
{
if(arr[j] > key)
arr[j + 1] = arr[j];
}
arr[j + 1] = key;
}
printf("\nAfter Sorting: ");
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
1条答案
按热度按时间yhxst69z1#
嵌套for循环的问题在于
arr[0]
总是被设置为key
,因为在内部for循环之后,j
等于-1
。你可以重写它们,例如,
请注意,操作符sizeof生成的值的类型为
size_t
。所以更正确的写法是你也应该在使用变量的最小范围内声明变量。
我会用下面的方法写程序