2017-05-04 36 views
0

我的選擇排序的執行不工作的情況下Ĵ< N-2n-1個ñ的。我究竟做錯了什麼?我的選擇排序有什麼問題?

有沒有一個在線的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

+0

你可以用語言標記你的問題(即'c')嗎? – trincot

回答

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以及所有調試功能,並逐步完成代碼。

+0

我的問題真的是爲什麼需要N-3?這是什麼意思? –

+0

這是不需要的。這是錯誤的。 – trincot

+0

那麼什麼是正確的解決方案? –