我写这个程序究竟出了什么问题?我看到了一些带有两个for循环的冒泡排序,但我不知道为什么这个没有用。
#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();
}
答案 0 :(得分:1)
您的冒泡排序算法错误。你在阵列上只做了一个循环。在第一个循环结束时,数组未排序。
如果你的阵列是:8 54 1 15 12 6
i = 0 ---> 8 54 1 15 12 6
i = 1 ---> 8 1 54 15 12 6
i = 2 ---> 8 1 15 54 12 6
i = 3 ---> 8 1 15 12 54 6
i = 4 ---> 8 1 15 12 6 54
i = 5 ---> a[6] points out of the array
一个周期后,您将拥有:8 1 15 12 6 54
没有排序,你必须做更多的循环(两个嵌套):
int i,k;
int temp;
for(i = 0; i<n-1; i++) {
for(k = 0; k<n-1-i; k++) {
if(v[k] > v[k+1]) {
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp;
}
}
}
正如M Oehm在问题评论中所述,当i
为5时,您通过n
访问不在阵列中的内存,这会导致潜在的段错误。