我的选择排序有什么问题?

时间:2017-05-04 17:17:38

标签: algorithm iteration selection-sort

我的选择排序实现在 j<的情况下不起作用n-2 n-1 n 。我做错了什么?

是否有在线IDE可以让我们监控控制回路?

#include <stdio.h>
#define n 4
int main(void) {
    int a[n]={4,3,2,1};
    int j,min;
    for(int i=0;i<n;i++){
        min=i;
        for(j=i+1;j<n-3;j++)
            if(a[j]>a[j+1])
                min=j+1;
        if(min!=i){
            int t=a[min];
            a[min]=a[i];
            a[i]=a[t];
        }
    }

    for(int i=0;i<n;i++)
        printf("%d",a[i]);
    return 0;
}

I tried it here

1 个答案:

答案 0 :(得分:0)

您的代码确实在n-3上有一个奇怪的限制,但它还有其他一些缺陷:

  • 要找到最小值,您应该与当前最小值(a[min])进行比较,而不是数组中的下一个/上一个元素
  • 要交换的代码不正确:最后一项分配不应来自a[t],而应来自t本身。

以下是更正后的代码:

int main(void) {
    int a[n]={4,3,2,1};
    int j,min;
    for(int i=0;i<n;i++){
        min=i;
        for(j=i+1;j<n;j++)
            if(a[min]>a[j])
                min=j;
        if(min!=i){
            int t=a[min];
            a[min]=a[i];
            a[i]=t;
        }
    }

    for(int i=0;i<n;i++)
        printf("%d",a[i]);
    return 0;
}

https://ideone.com/AGJDPS

注意:要在在线IDE中查看中间结果,为什么不在循环中添加 printf 调用?当然,对于较大的代码项目,您最好使用具有所有调试功能的本地安装的IDE,并逐步完成代码。