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

toe95027  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(61)

我写的这个程序到底有什么问题?我看到一些气泡排序的东西与两个循环,但我不明白为什么这一个不工作。

#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();
}
sxissh06

sxissh061#

你的冒泡排序算法是错误的。你只是在你的阵列上做一个周期。在第一个循环结束时,数组没有排序。
如果你的数组是: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访问不在阵列中的内存,这会导致潜在的段故障。

相关问题