2017-11-25 52 views
-1
#include<stdio.h> 


void swap(int a[60],int p, int min){ 
    int temp; 
    if (min!=p){ 
    temp= a[p]; 
    a[p]=a[min]; 
    a[min]=temp; 
    } 
    return; 
} 

void selection(int a[60]){ 
    int p=0; 
    do { 
    int min = p; 
    for (int i=p+1;i<60;i++){ 
     if(a[min]>a[p])min=p; 

    } 
    swap(a,p,min); 
    p++; 
    } while(p<60); 
} 




int main(){ 
    int a[60]; 
    int p=0; 
    while(p<60){ 
     scanf("%d\n",&a[p]); 
     p++; 
    } 
    selection(a); 
    p=0; 
    while(p<60){ 
     printf("%d\n",a[p]); 
     p++; 
    } 

    return 0; 
} 
  1. 在主第一功能掃描從標準輸入一個60大小的數組。
  2. 如上所定義的被稱爲一個選擇函數「應該」陣列
  3. 選擇函數定義了一個變量p以能夠經過陣列60倍
  4. 另一個for循環找到最低元件陣列中的排序
  5. 如果找到,則交換函數交換在最小和對位置
  6. 的循環運行60次以對數組進行排序
  7. 打印數組被稱爲在主函數數組值
+1

你'如果(A [分鐘]> [p]組)分= P;'原因造成的問題。 'p'不會改變。 '我'。 –

+2

歡迎來到SO。請參觀參觀,瞭解要問什麼問題以及如何。這裏沒有問題。 –

+0

謝謝@MayankVerma。 –

回答

0

這裏的問題:

for (int i=p+1;i<60;i++){ 
    if(a[min]>a[p])min=p; 
} 

你的循環比較a[min]a[p],看看哪一個較小。 p在循環中沒有變化,但是,i是。這就是你需要比較和設置min如果你找到一個小數目指數:

if(a[min]>a[i]) min=i; 
+0

謝謝,多麼天真的錯誤:) –