数组按C中的ascendent顺序排序

时间:2016-12-03 13:34:42

标签: c arrays sorting

我目前正在尝试在C中制作数组排序器;但它不起作用,我真的不明白为什么,所以我请你帮忙。

for(j=0;j<taille;j++){
    for(i=j; i<taille -1;i++ ){

        imin = j;
        nbmin = tableau[j];

        if (tableau[i+1]<nbmin){

            imin = i+1; // on stocke l'indice de la plus petite variable
            nbmin = tableau[i+1]; // on stocke la plus petite variable dans une variable intermédiaire
        }
        tableau[imin] = tableau[j]; // prend la dernière case non triée pour la mettre à l'endroit de la plus petite case du tableau
        tableau[j] = nbmin; // la dernière case non triée contient la plus petite valeur non triée -> la cse est donc triée

    }
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

在外循环的每次迭代中,您需要确定子数组[j ... taille]的最小元素并将其复制到前面。您使用的算法很简单:

  • 将最小值初始化为第一个元素
  • 查看其余元素以找到最低要求
  • 使用最小值
  • 交换第一个元素

i上的内部循环是列表中的第二项,但在您的实现中,初始化和交换发生在该循环内。

您的代码应如下所示:

for(j = 0; j < taille; j++) {
    int imin = j;                           // initialise minimum
    int nbmin = tableau[j];

    for(i = j + 1; i < taille; i++) {       // find minimum
        if (tableau[i] < nbmin) {
            imin = i;
            nbmin = tableau[i];
        }
    }

    tableau[imin] = tableau[j];             // swap elements
    tableau[j] = nbmin;
}

(我还改变了内部索引,因此您可以查看元素tableau[i]而不是元素tableau[i + 1],我觉得这更自然。我已经做了变量描述外循环的最小局部。)

答案 1 :(得分:1)

我想你想使用Selection Sort(wiki page)。

想法是找到每个传递中的最小项目并将其放在适当的位置。

这是一个代码片段,可以为您提供相关信息。跳过变量声明和swap例程。

for (i = 0; i < n - 1; i++)
{
    min_index = i;
    for (j = i + 1; j < n; j++)
        if (array[j] < array[min_index])
            min_index = j;

    if (min_index != i)
        swap(array[i], array[min_index]);
}