1.ソートの概念
並べ替えは、特定のルールに従って一連のデータを並べ替える操作です。
一般的な並べ替えアルゴリズム
//排序实现的接口
void InsertSort(int* a,int n); //插入排序
void ShellSort(int* a,int n); //希尔排序
void SelectSort(int* a, int n); // 选择排序
void AdjustDwon(int* a, int n, int root);
void HeapSort(int* a, int n);// 堆排序
// 冒泡排序
void BubbleSort(int* a, int n)
// 快速排序递归实现
// 快速排序hoare版本
int PartSort1(int* a, int left, int right);
// 快速排序挖坑法
int PartSort2(int* a, int left, int right);
// 快速排序前后指针法
int PartSort3(int* a, int left, int right);
void QuickSort(int* a, int left, int right);
// 快速排序 非递归实现
void QuickSortNonR(int* a, int left, int right)
// 归并排序递归实现
void MergeSort(int* a, int n)
// 归并排序非递归实现
void MergeSortNonR(int* a, int n)
// 计数排序
void CountSort(int* a, int n)
2.一般的な並べ替えの実装
1.挿入ソート
直接挿入
直接挿入法は、単純な挿入ソート法であり、ソートされる要素を1つずつソートされたソートされたシーケンスに挿入して、新しいソートされたシーケンスを形成します。
{3、6、1、5}を{2、4}に挿入するようなもので、{1、2、3、4、5、6}を取得します。
では、どのように達成されますか?
インライン機能
- 1.要素が挿入前の順序に近いほど、挿入効率が高くなります。
- 2.時間計算量:O(N ^ 2)
- 3.スペースの複雑さ:O(1)
- 4.安定性:安定
ヒルソート(縮小インクリメンタルソート)
ヒルソート方法は、最初に整数を選択し、ソートする要素をいくつかのグループに分割し、等距離のすべての要素を同じグループに分割し、要素の各グループをソートすることです。
ヒルソートの特徴
- 1.ヒルソートは直接挿入ソートの最適化です
- 2. gap> 1が事前にソートされている場合、その目的は、ソートされた要素を順序に近づけることです。
- 3.時間計算量:O(N ^ 1.3-N ^ 2)
- 4.安定性:不安定
2.選択ソート
毎回ソートする要素から最小(最大)のものを選択し、すべての要素がなくなるまでシーケンスの先頭に配置します。
直接選択ソート
直接選択とは、ソートする要素を比較し、最大または最小の要素を選択してから、残りの要素が1になるまで残りの要素に対して操作を繰り返し、操作を停止することです。
直接選択ソートの機能
- 1.直接選択ソートはわかりやすいですが、効率が悪く、実際に使われることはめったにありません。
- 2.時間計算量:O(N ^ 2)
- 3.スペースの複雑さ:O(1)
- 4.安定性:不安定
ヒープソート
ヒープソートは、ヒープのデータ構造を使用して設計されたソートアルゴリズムであり、一種の選択ソートです。大きなヒープを昇順で作成し、小さなヒープを降順で作成することを忘れないでください。
ヒープソートの機能
- 1.ヒープソートは、ヒープを使用して数値を選択します。これは、はるかに効率的です。
- 2.時間計算量:O(N * logN)
- 3.スペースの複雑さ:O(1)
- 4.安定性:不安定
3.スワップソート
2つの要素の比較結果に従って、2つの要素の順序を入れ替え、大きい方の値を最後に移動し、小さい方の値を前に移動します。
バブルソート
バブルソートの特徴
- 1.バブルソートは非常に理解しやすいソートです
- 2.時間計算量:O(N ^ 2)
- 3.スペースの複雑さ:O(1)
- 4.安定性:安定
クイックソート
クイックソートは二分木交換ソート方式で、任意の要素を基準値とし、セットを2つのシーケンスに分割し、左が右より小さく、同じことを繰り返します。
基本値に従って間隔を左半分と右半分に分割する一般的な方法は次のとおりです。
- 1.Hoareバージョン
- 2.掘削方法
- 3.フロントおよびリアポインターバージョン
4.マージソート
マージソートとは、既存のサブシーケンスをソートし、2つのソートされたリストを1つのソートされたリストにマージすることです。
マージソート機能
- 1.マージの欠点は、O(N)スペースの複雑さが必要になることです。マージソートの考え方は、ディスク内の外部ソートの問題を解決することです。
- 2.時間計算量:O(N * logN)
- 3.スペースの複雑さ:O(N)
- 4.安定性:安定
5.非比較ソート
非比較ソートの機能
- 1.カウントの並べ替えがデータ範囲に集中している場合、効率は非常に高くなりますが、適用できる範囲とシナリオは制限されます。
- 2.時間計算量:O(MAX(N、range))
- 3.スペースの複雑さ:O(範囲)
- 4.安定性:安定