並べ替え:コンピュータでよく実行される操作。その目的は、「順序が正しくない」レコードシーケンスのセットを「順序付けられた」レコードシーケンスに調整することです。
最も単純なソートアルゴリズムは、バブルソート、選択ソート、挿入ソートです。
バブルソート
基本的な考え方: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;
}