-3

C++ で選択ソートを実装しようとしています。このコードで何が間違っていたのかわかりませんが、結果が正しくソートされていません。私が間違ったことを教えてください。ご協力ありがとうございました。

出力結果: 23 31 4 89 2 8 10 11

#include <iostream>

using namespace std;

void printElement(int arr[],int size)
{
  for(int i = 0; i < size; i++)
      cout << arr[i] << "  ";            
}


// arr[] = {31, 23, 4, 89, 2, 8, 10, 11}
void selectionSort(int arr[], int size)
{     
   int i, j, min, min_id,  tmp;

   for(i = 0; i < size-1; i++){
       min = arr[i];
       for(int j = i + 1; j < size; j++){
           if (arr[j] < min){
                min = arr[j];
                min_id = j;   
           } 
           tmp = arr[i]; //tmp = min; - this is wrong by msl
           arr[i] = arr[min_id]; //min = arr[min_id]; this is wrong by msl
           arr[min_id] = tmp;   
       }   
       printElement(arr, size); 
       cout << endl;  
   }  
}


int main()
{
    int size = 8;
    int arr[] = {31, 23, 4, 89, 2, 8, 10, 11};
    selectionSort(arr, size);
    printElement(arr, size);

    system("PAUSE");
    return 0; 
}       
4

1 に答える 1

1
   tmp = arr[i]; //tmp = min; - this is wrong by msl
   arr[i] = arr[min_id]; //min = arr[min_id]; this is wrong by msl
   arr[min_id] = tmp;   

上記は、ループの間違ったセクションに配置されています。選択ソートでは、内側のループではなく、外側のループでスワッピングが発生します。

于 2013-08-26T00:38:44.653 に答える