2012-04-24 91 views
1

我想在C中做一個簡單的程序來實現Selection Sort選擇排序程序產生不正確的輸出

下面是我的程序:

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

int main(void) 
{ 
    int min, total, *arr,i,j,temp; 

    clrscr(); 
    printf("Enter the size of array : "); 
    scanf("%d",&total); 
    arr = (int *) malloc(total * sizeof(int)); 

    for(i = 0; i<total; i++) 
    { 
    printf("\nEnter element %d: ", i+1); 
    scanf("%d", &arr[i]); 
    } 

    min = arr[0]; 
    for(i = 0; i<total; i++) 
    { 
    for(j = i; j<total; j++) 
    { 
     if(arr[j]<min) 
     { min=arr[j]; } 
    } 

    min = temp; 
    min = arr[i]; 
    arr[i] = min; 
    } 

    for(i = 0; i<total; i++) 
    { 
    printf("%d \t", arr[i]); 
    } 

    getch(); 
    return 0; 
} 

輸出:

enter image description here

答案應該已經

如何解決我的計劃?

編輯1:閱讀cnicutar的答案

min = arr[0]; 
    for(i = 0; i<total; i++) 
    { 
    for(j = i; j<total; j++) 
    { 
     if(arr[j]<min) 
     { 
    min=arr[j]; 
    min_index = j; 
     } 
    } 

     temp = a[i]; 
     a[i] = min; 
     a[min_index] = temp; 
    } 

現在,經過

固定溫度的問題,我得到這個在上面的輸入值:10 10 10 20 10 10

編輯2:

發現問題,該程序使用相同的m所有迭代

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

int main(void) 
{ 
    int min, min_index, total, *arr,i,j,temp; 

    clrscr(); 
    printf("Enter the size of array : "); 
    scanf("%d",&total); 
    arr = (int *) malloc(total * sizeof(int)); 

    for(i = 0; i<total; i++) 
    { 
    printf("\nEnter element %d: ", i+1); 
    scanf("%d", &arr[i]); 
    } 

    min = arr[0];    //   min = arr[0] = 70    || min = 10  <-- Problem   
    for(i = 0; i<total-1; i++) //   i = 0       ||     
    {       //           || 
    for(j = i; j<total; j++) //   j = i = 0      ||     
    {       //           ||       
     if(arr[j]<min)   //   30<70  ; 40<30 ; 10<30  ||         
     {      //           || 
    min=arr[j];    //   min = 30 ;  ; min = 10 ||            
    min_index = j;   //   index = 1 ;  ; index = 3 ||                  
     }      //           || 
    }       //           || 
           //           || 
    if(min!=arr[i])   //           || 
    {       //           || 
     temp = arr[i];   //           || 
     arr[i] = min;   //           || 
     arr[min_index] = temp; //  After swap:  10 30 40 70 80 20 || 
    } 
    min = arr[i+1];   // (Add this to fix the problem) 
    } 

    for(i = 0; i<total; i++) 
    { 
    printf("%d \t", arr[i]); 
    } 

    getch(); 
    return 0; 
} 
+0

您並不需要純文本輸出的屏幕截圖。您可以複製並粘貼文本。 – larsks 2012-04-24 14:49:30

回答

2

至少有2個問題的最小值值:你的「交換」是錯誤的:

min = temp; 
min = arr[i]; 
arr[i] = min; 

,你應該記住的最小元素的索引,改變min韓元不行。具體來說:您想更改arr[mystery]其中mystery = j在您的if

+0

謝謝你..^_^.. – 2012-04-24 15:45:51

0

不應該這個是

for(j = i+1; j<total; j++) 
{ 

沒有我+ 1,你通過你已經排序值迭代。

+0

是的,這是真的。 – 2012-04-24 15:46:18