排序函数helpers.c,只列出几个数字

时间:2015-10-01 04:50:40

标签: c sorting

我的排序功能似乎只重复列出了千位中的3个数字。不知道为什么。有什么想法吗?

我的排序数组从这里开始。我创建了一个迭代n个数字的for循环。然后我比较这些值并创建一个交换算法。我认为我的交换算法存在缺陷。

/**
 * Sorts array of n values.
 */
void sort(int values[], int n)
{        
    //TODO: implement an O(n^2) sorting algorithm
    for (int i = 0; i < n - 1; i++)
    {
        if (values[i] < values[i + 1])
        {         
          int holder = values[i];
          values[i] = holder;
          values[i + 1] = values[i];
          values[i] = holder;
          printf("%i\n", values[i]);                
        }       
    }       
    return;        
}

2 个答案:

答案 0 :(得分:0)

以下行中存在逻辑错误:

    int holder = values[i];
    values[i] = holder;
    values[i + 1] = values[i];
    values[i] = holder;

我假设您要交换values[i]values[i+1]的值。

您未在该代码中的任何位置提取values[i+1]的值,以将其分配给values[i]

您需要使用:

    int holder = values[i];
    values[i] = values[i + 1];
    values[i + 1] = holder;

答案 1 :(得分:0)

这种情况正在发生,因为您没有正确实现冒泡排序。这样做如下 -

/**
 * Sorts array of n values.
 */
void sort(int values[], int n)
{        
    //TODO: implement an O(n^2) sorting algorithm
    for (int i = 0; i < n - 1; i++)
    {
        for(int j=0;j<n-i-1;j++)
        {
        if (values[j+1] < values[j])
        {         
          int holder = values[j];
          values[j] = values[j + 1] 
          values[j + 1] = holder;

          printf("%i\n", values[j]);                
        }   
        }     
    }       
    return;        
}

在你的算法中,你只遍历数组一次(因为只有一个用于循环),而为了正确排序,你需要有两个嵌套循环。

相关问题