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

时间:2015-10-11 17:23:04

标签: c sorting numbers

我写这个程序究竟出了什么问题?我看到了一些带有两个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();
}

1 个答案:

答案 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访问不在阵列中的内存,这会导致潜在的段错误。