基本的な並べ替え(バブル、選択、挿入)スタディノート

並べ替え:コンピュータでよく実行される操作。その目的は、「順序が正しくない」レコードシーケンスのセットを「順序付けられた」レコードシーケンスに調整することです。

最も単純なソートアルゴリズムは、バブルソート、選択ソート、挿入ソートです。

バブルソート

基本的な考え方:2つの数値のサイズを比較すると、大きい方が沈み、小さい方が上がります。

  • 2つの隣接するデータを比較し、2番目の数値が小さい場合は、位置を交換します。
  • 2つのペアを後ろから前へ、最初の2つのデータまで比較します。結局、最も小さい数が最前面に入れ替えられるので、最も小さい数を最前面に配置します。
  • プロセスを繰り返すし続け、我々は第一、第二ラウンド達成することができる\(2 \)最初に少数を\(2 \)の位置、第1から第3ラウンドで実装\(3 \)少数でセクション\(3 \)位置、......、実行\(N-1 \)ホイールの後、我々は保証することができる\(N- \)ウェルの昇順に配列されたの数。

実装コードは次のとおりです。

#include <bits/stdc++.h>
using namespace std;
int n, a[1000];
int main() {
    cin >> n;
    for (int i = 1; i <= n; i ++) cin >> a[i];
    for (int i = 1; i < n; i ++) {  // 需要执行n-1轮
        for (int j = n-1; j >= i; j --) {
            if (a[j] > a[j+1]) {
                swap(a[j], a[j+1]); // swap函数用于交换两个数
            }
        }
    }
    for (int i = 1; i <= n; i ++) cout << a[i] << " ";
    return 0;
}

並べ替えを選択

基本的な考え方:

  • 長さ\(n \)の順序付けられていない配列で、最初のトラバーサル\(n-1 \)の後に、最小値を見つけて、それを最初の要素と交換します。
  • 2番目のトラバーサル\(n-2 \)番号の後、最小値を見つけて、2番目の要素と交換します。
  • ……
  • 最初の\(N-1 \)トラバーサル最後の番号、の最小値を見つける\(N-1 \)番目のスイッチング素子、ソートが完了しました。

実装コードは次のとおりです。

#include <bits/stdc++.h>
using namespace std;
int n, a[1000];
int main() {
    cin >> n;
    for (int i = 1; i <= n; i ++) cin >> a[i];
    for (int i = 1; i < n; i ++) {  // 执行n-1轮
        for (int j = i+1; j <= n; j ++) {   // j从i+1到n遍历
            if (a[i] > a[j]) {  // 如果a[i]比a[j]大,交换他俩的值
                swap(a[i], a[j]);   // 这样能够该轮循环结束时保证a[i]比它后面的所有数都要小
            }
        }
    }
    for (int i = 1; i <= n; i ++) cout << a[i] << " ";
    return 0;
}

ソートを挿入

基本的な考え方:

並べ替える数値のグループで、最初のn-1個の数値が既に並べ替えられていると仮定して、n番目の数値を前の順序付けられた数値シーケンスに挿入すると、n個の数値も並べ替えられます。すべてが整うまで、このサイクルを繰り返します。

合理的なトランプの例に従って、挿入順序を視覚的に覚えることができます。

実装コードは次のとおりです。

#include <bits/stdc++.h>
using namespace std;
int n, a[1000];
int main() {
    cin >> n;
    for (int i = 1; i <= n; i ++) cin >> a[i];
    for (int i = 1; i <= n; i ++) {
        int j = i, tmp = a[i];
        while (j>1 && a[j-1]>tmp) {
            a[j] = a[j-1];
            j --;
        }
        a[j] = tmp;
    }
    for (int i = 1; i <= n; i ++) cout << a[i] << " ";
    return 0;
}

おすすめ

転載: www.cnblogs.com/quanjun/p/12712451.html