我写的这个程序到底有什么问题?我看到一些气泡排序的东西与两个循环,但我不明白为什么这一个不工作。
#include <stdio.h>
#include <conio.h>
void main(){
int a[6];
int i;
int temp;
int n;
printf("Enter numbers.\n");
for (i = 0; i < 6; ++i)
{
scanf("%d", &a[i]);
}
for (i = 0; i < 6; ++i)
{
n = i + 1;
if (a[i] < a[n])
{
temp = a[i];
a[i] = a[n];
a[n] = temp;
}
}
printf("After sorting: \n");
for (i = 0; i < 6; ++i)
{
printf("%d ", a[i]);
}
getch();
}
1条答案
按热度按时间sxissh061#
你的冒泡排序算法是错误的。你只是在你的阵列上做一个周期。在第一个循环结束时,数组没有排序。
如果你的数组是:8 54 1 15 12 6
一个周期后,您将获得:8 1 15 12 6 54
这是不排序的,你必须做更多的循环(两个嵌套的):
正如M Oehm在问题注解中所述,当
i
为5时,您通过n
访问不在阵列中的内存,这会导致潜在的段故障。