選択ソートの C++ 実装

説明する

選択ソートは、シンプルで直感的なソート アルゴリズムです。その基本的な考え方は、各ラウンドで、並べ替えるデータから最小 (または最大) の要素を選択し、並べ替えるデータの最初の要素と位置を交換することです。すべてのデータが並べ替えられるまで、残りの未並べ替えデータに対してこのプロセスを繰り返します。

実装のアイデア

  1. 配列を走査し、最小の要素のインデックスを見つけます。
  2. 最小の要素を現在のトラバース位置の要素と交換します。

画像.png

時間の複雑さ

選択ソートの時間計算量は O(n^2) です。ここで、n はソートされる配列の長さです。

空間の複雑さ

選択ソートのスペース複雑さは O(1) であり、一定レベルの補助スペースのみが必要です。

サンプルコード

#include <iostream>

void selectionSort(int arr[], int n) {
    
    
    for (int i = 0; i < n - 1; i++) {
    
    
        int minIndex = i;
        for (int j = i + 1; j < n; j++) {
    
    
            if (arr[j] < arr[minIndex]) {
    
    
                minIndex = j;
            }
        }

        // 最小元素与当前元素交换
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
        std::cout << "sort : " << i+1 << "  :";
        for(int k = 0; k < n-1; ++k)
        {
    
    
            std::cout << arr[k] << "\t";
        }
        std::cout << std::endl;
    }
}

int main() {
    
    
    int arr[] = {
    
    9, 1, 2, 5, 7, 4, 8, 6, 3, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    std::cout << "sort Before:" << std::endl;
    selectionSort(arr, n);

    std::cout << "sort End: \n";
    for (int i = 0; i < n; i++) {
    
    
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

結果:
画像.png

予防

  • 選択ソートは不安定なソート アルゴリズムです。つまり、同じ要素の相対的な順序が変わる可能性があります。
  • 選択ソートはパフォーマンスが低く、大規模なデータのソートには適していません。
  • 実際のアプリケーションでは、最小要素の位置を記録し、それを直接交換するなどの最適化アルゴリズムによって、選択ソートのパフォーマンスを向上させることができます。
  • 複数の交換操作が必要であり、他のソート アルゴリズムと比較して、選択ソートではより多くの交換が必要です。

結論は

不管脚步有多慢都不要紧,只要你在走,总会看到进步

おすすめ

転載: blog.csdn.net/MrHHHHHH/article/details/135210659