2013-10-30 52 views
0

爲什麼這個選擇排序程序我寫不工作
它不排序數組。我究竟做錯了什麼?使用選擇排序排序陣列將不起作用

//This program uses selection sort algorithm to sort an array 

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include <conio.h> 



void main() 
{ 

    int arr[10],i,j,small,pos,a; 

    printf("SELECTION SORT\n"); 

    srand(time(NULL)); 
    i=0; 
    while(i<10) 
    { 
      arr[i]=rand()%100; 
     printf("%d ",arr[i]); 
     i++; 
    } 



    j=0; 
    while(j<10) 
    { 
     i=j; 
     small=arr[j]; 
     while(i<10) 
     { 
      if(arr[i]<small) 
      {  small=arr[i]; 
       pos=i; 
      } 
      i++; 
     } 


     a=arr[pos];  
     arr[pos]=arr[j]; 
     arr[j]=a; 
     j++; 
    } 

    printf("\nThe array has been sorted\n"); 

    i=-1; 
    while(++i<10) 
     printf("%d ",arr[i]); 
    getch(); 


} 

算法尋找最小元素的一部分工作 外環是我想我犯了一個錯誤,但我無法弄清楚什麼
的一點小建議,將不勝感激
由於

+0

如果第一個元素碰巧是最小的,那麼'pos'會發生什麼? –

回答

0

你需要在你的代碼的一個非常小的變化,它的工作

... 
while(j<10) 
{ 
    i=j+1; // change i=j to i=j+1 
    small=arr[j]; 
    while(i<10) 
    { 

    ... 
    } 

    if (small!=arr[j]) 
    { 
     a=arr[pos];  
     arr[pos]=arr[j]; 
     arr[j]=a; 
    } 
    j++; 
    ... 

你可以看到爲什麼需要這種變化?