【问题标题】:Sort program not working, not sure why排序程序不起作用,不知道为什么
【发布时间】:2017-07-09 18:56:28
【问题描述】:
void sort(int values[], int n)
{
    int smallestSpot = 0;
    for (long long i = 0; i < n ; i++)
    {
        int smallest = values[i];
        for(long long j = i; j < n - i ; j++) //find the smallest int in array
        {
            if(values[j] < smallest)
            {
                smallestSpot = j;
                smallest = values[j];
            }
        }
        values[smallestSpot] = values[i];
        values[i] = smallest;
    }
    return;
}

我的排序算法覆盖了第一个数字,我不知道为什么,请帮忙。谢谢。

【问题讨论】:

  • 你是用调试器单步调试的,还是通过打印出来检查变量?
  • long long j = i; --> long long j = i + 1;
  • @cᴏʟᴅsᴘᴇᴇᴅ 我原来就是这样,但它没有用
  • 还有j &lt; n - i --> j &lt; n
  • 在进入第二个循环之前添加这一行smallestSpot = i。考虑索引0 处的元素最小的情况,而索引1 处的下一个最小的情况是,当i=1 和刚刚完成内部for 循环后,索引0 处的元素将被索引1 处的元素覆盖。因为samllestSpot0。此外,不需要使用long long int 来索引数组,数组中的元素数量n 本身就是int

标签: c cs50


【解决方案1】:

感谢 COLDSPEED 和 GAURANG VYAS 通过执行我们对工作版本代码所做的更改。

代码

#include <stdio.h>
 
void sort(int values[], int n){
 
    int smallestSpot = 0;
 
    for (long long i = 0; i < n ; i++){
 
        int smallest = values[i];
        smallestSpot = i;
 
        for(long long j = i+1; j < n  ; j++){ //find the smallest      int in array
            if(values[j] < smallest){
                smallestSpot = j;
                smallest = values[j];
            }
        }
 
            values[smallestSpot] = values[i];
            values[i] = smallest;   
    }
}
 
 
int main(void){
 
    int arr[5] = {8,1,9,10,2};
    sort(arr,5);
    for(int i=0;i<5;i++){
        printf("%d\n",arr[i]);
    }
 
    return 0;   
}

在尝试编码之前,请先用笔和纸跟踪您的算法。 我们有很多排序算法,我建议查看this 链接,并直观地了解排序问题和解决方法。

编辑

【讨论】:

  • 如果能提供一个带有 ideone 的工作样本会很好......但仍然 +1。
  • @cs95 我真的建议尝试 repl.it,它是值得的,如果你需要包含像 ncurses 这样的库,它也提供了一个 shell
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 2017-10-30
  • 2018-06-28
相关资源
最近更新 更多