2012-04-24 3 views
1

Selection Sortを実装するために、Cで簡単なプログラムを作成しようとしています。選択ソートプログラムが不正な出力を生成する

以下

私のプログラムです:

#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

答えは

私はどのように修正することができますされている必要があります私のプログラム?

EDIT 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

EDIT 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

答えて

2

少なくとも2問題のinimum値:

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

そして、あなたはminウォンを変更し、最小要素のインデックスを記憶する必要があります:あなたの「スワップ」は間違っていますありません。具体的には:arr[mystery]を変更する場合はifmystery = jを入力してください。

+0

ありがとう..^_^.. –

0

これはあなたがすでにソートきた値を反復しているI + 1、なし

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

すべきではありません。

+0

はい、それは本当です。 –

関連する問題