2016-04-21 16 views
0

私のプログラムは、選択ソートを使用して最小のソートを最大のソートにしようとしていました。すべてがコンパイルされて実行されますが、プログラムを使用しようとすると、数字が正しい順序ではありません。選択ソート配列

あなたは私がすべてを試しても正しい順序で数字を表示していないので、正しく動作させるために何か変更があるかどうかを調べることができますか?あなたのindex_of_minimal機能で

#include <iostream> 
#include <string> 
#include <cstdlib> 
using namespace std; 

void makearray(int data[],int n) 
{ 
for (int i =0 ; i < n ; i++) 
    data[i]=(1+rand()%(1000-1+1)); 
} 


template <class item, class sizetype> 
int index_of_minimal(const item data[],sizetype i, sizetype n) 
{ 
    int index=i; 
    int first=data[i]; 

    for (i; i < n; i++) 
    { 
     if (data[i] < first) 
      index = i; 
    } 

    return index; 
} 


template <class item, class sizetype> 
void swap(item data[],sizetype i, sizetype j) 
{ 
    int temp; 

    temp=data[i]; 
    data[i]=data[j]; 
    data[j]=temp; 
} 


template <class item, class sizetype> 
void selectionsort(item data[], sizetype n) 
{ 
    int j; 
    for(int i=0; i< n-1; i++) 
    { 
     j=index_of_minimal(data,i,n); 
     swap(data,i,j); 
    } 

} 

int main() 
{ 
    int n; 

    cout << "Enter n: " ; 
    cin>>n; 
    int data[n]; 
    makearray(data,n); 

    cout << "unsorted array: " ; 
    for(int i = 0; i < n; i++) 
     cout << data[i] << " "; 
    cout << endl; 

    selectionsort(data, n); 

    cout << "sorted array: " ; 
    for(int i = 0; i < n; i++) 
     cout << data[i] << " "; 
    cout << endl; 
    return 0; 
} 

答えて

1

、あなたはあなたの繰り返しで、そのインデックス、そうでない場合は別の番号を保存するとともに、次の比較のために、現在の最小値(first)をリセットする必要があり、あまり元first値がまだあり得ることあなたがすでに処理したものよりも大きい。

だから、このようにする必要があります:

for (i; i < n; i++) 
{ 
    if (data[i] < first) 
    { 
     index = i; 
     first=data[i];//also save the new minimum value 
    } 
}