简单的程序排序的数字在C



我写的这个程序到底出了什么问题?我看到一些气泡排序的东西有两个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();
}

你的冒泡排序算法是错误的。你只对数组做了一次循环。在第一个循环结束时,数组没有排序。

如果你的数组是: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

没有排序,你必须做更多的循环(两个嵌套for):

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访问不在您的数组中的内存,这会导致潜在的段错误。

最新更新