バブルソート
/ * * BubbleSort.h *バブルソート 2020年2月10日:*で作成 *著者:LuYonglei * / #ifndefのSRC_BUBBLESORT_H_ #define SRC_BUBBLESORT_H_ する#include <ベクトル> 使用して 名前空間はstdを、 #if 0 テンプレート <型名T> ボイドバブルソート(ベクトル<T>&ARR){ // 小から大へバブルソート、(予め存在する場合に配列を最適化することができる順序付けられ、これは以下の確率を生じる) ための(int型エンド= arr.size() - 1 ; END> 0 ; end-- ){ // 外部ループトラバース時間が BOOLソート=をtrueに ; // 最適化フラグを追加 するために(int型 =開始1。 ;始める<= END; ++開始) { // サイクル及びスイッチング周波数制御コンパレータ内部 IF(ARR <ARR [開始- [開始] 。1 ]){ スワップ(ARR [開始ARR、[開始] - 1 ])。 ソート = 偽; } } // すでに注文した場合は、早期終了の順序 IF (ソート) BREAK ; } } #そうしないと テンプレート <型名T> のボイドバブルソート(ベクトル<T>&ARR){ // 小規模から大規模までバブルソート、(地元のためのシーケンスの終わりには、比較の回数を減らすために、最後の交流の位置を記録することができた場合) のために(int型エンド= ARR .size() - 1 ; END> 0 ; end-- ){ // 外部ループトラバース時間は int型 sortedIndex = 0 ; // 最適化インデックスを添加(屈折率は任意に設定されるべきではない、完全に順序付けられたデータの準備完全予め順序付け出口)場合 のために(int型 =を始める。1 ;始める<= END;始める++ ){ // インナーループ制御とスイッチング周波数比較 IF(ARRが<ARR [開始]を[開始- 1。]){ スワップ(ARR [開始ARR、[開始] - 1 ])。 sortedIndex = 始めます。 } } // 最後に記録された交換位置は、比較の回数削減する エンド= sortedIndexを。 } } #endifの #endifの / * SRC_BUBBLESORT_H_ * /
選択ソート
/ * * SelectionSort.h *選択ソート(選択ソートははるかに少ない交換の数よりもバブルソート、平均より優れてバブルソート) 2020年2月10日:*で作成 *著者:LuYonglei * / #ifndefのSRC_SELECTIONSORT_H_ #define SRC_SELECTIONSORT_H_ する#include <ベクトル> 使用して 名前空間はstdを、 #if 1 テンプレート <型名T> ボイド選択ソート(ベクトル<T>&ARR){ // 配列から最大の要素、及びスイッチング素子終了位置を選択 するための(int型の終了= arr.size() - 1 ; END> 0 ; END- - ){ int型 maxIndex = 0 ; // 要素の最大屈折率 のために(int型開始= 0 ;始まる<= END;始める++ ){ IF(ARR [開始]> = ARR [maxIndex]) maxIndex =始まる; // 最大要素位置の保持指標(ソートアルゴリズムの安定性を確保するため、及びニーズ=) } スワップ(ARR [maxIndex]、ARR [終了]); //は、最大の要素を選択し、最後の要素の位置を交換し } } #else // ソートアルゴリズムは、アルゴリズムの複雑さを軽減することができて、それはヒープソートに由来し、スタックのための最高の値を選択するために使用 #endifの #endifの / * SRC_SELECTIONSORT_H_ * /
挿入ソート
/ * * InsertionSort.h *挿入ソート 2020年2月11日:*で作成 *著者:LuYonglei * / #ifndefのSRC_INSERTIONSORT_H_ #define SRC_INSERTIONSORT_H_ する#include <ベクトル> の#include " BinarySearch.h " 使用して 名前空間はstdを、 #if 0 テンプレート <型名T> ボイド挿入ソート(ベクトル<T>&ARR){ ため(=始まるsize_tの1。 ; <)(arr.size始まる; ++始まる){ int型の端= 始まる; // 要素の端要素が少ないエンド1を超える場合交換位置、そうでなければループのうち 一方(完> 0 &&(ARR [終了] <ARR [エンド- 1 ])){ スワップ(ARR [終了]、[終了ARR - 1 ])。 エンド - ; } } } #elifの 0 // 最適化は、代わりに交換を移動します テンプレート<型名T> ボイド挿入ソート(ベクトル<T>&ARR){ ため(=始まるSIZE_T 1 ; <(arr.size開始); ++始まる){ int型 =端を始めます。 値T = ARR [END]; // 端部要素は、そうでなければ、ループの外に、エンド1素子を覆うように素子端と端-1元素よりも小さい場合には 、一方(エンド> 0 &&(値<ARR [エンド- 1 ])){ ARR [END] = ARR [エンド- 1 ]。 エンド - ; } ARR [END] = 値。 } } #そうしないと // 部品のバイナリ検索の最適化(比較回数の再最適化に基づいて動きを)命じました テンプレート<型名T> ボイド挿入ソート(ベクトル<T>&ARR){ ため(=始まるSIZE_T 1 ; <(arr.size開始);始める++ ){ 値T = ARR [開始]; // 値を挿入するために、保存 int型のインデックス= indexOfInsertion(ARR、開始、値); // 位置を挿入するために取得 // 移動要素 のための(INT I>索引; I =開始をI- - ){ ARR [I] = ARR [I - 1 ]。 } ARR [インデックス] = 値。 } } #endifの #endifの / * SRC_INSERTIONSORT_H_ * /
バイナリサーチを用いた最適化に挿入ソート
/ * * BinarySearch.h *バイナリ検索 *ので、エンド開始=サイズという、左右からの配列の範囲が開閉とするという便利なエンコーディングを確保するようにしてください 2020年2月11日:*で作成 *著者:LuYonglei * / #ifndefのSRC_BINARYSEARCH_H_ #define SRC_BINARYSEARCH_H_ する#include <ベクトル> 使用して 名前空間はstdを、 #define ELEMENT_NOT_FIND -1 // 配列arrで注文した位置に、検索値 テンプレート<型名T> INT(のindexOf CONSTベクトル<T>&ARR、int型の{サイズ、T値) INT ARRAYSIZE = arr.size(); IF(ARRAYSIZE == 0 ||サイズ<= 0 || ARRAYSIZE < サイズ) 戻りELEMENT_NOT_FIND; intは開始= 0 ; // トップ要素のインデックス int型エンド=サイズ; // の最後の要素のインデックス ながら(開始< エンド){ int型ミドル=(開始端+)/ 2 ; IF(値< ARR [ミドル]) { 終了 = ミドル。 } そう であれば(値> ARR [中央]){ 開始 = +中間1 。 } 他{ // 値== ARR [中間] 戻り中間。 } } リターンELEMENT_NOT_FIND。 } // 位置に挿入される値は、配列ARR順序付け見つける // 最初の位置よりも順序付けられた配列値より大きいと テンプレート<型名T> INT indexOfInsertion(constのベクトル<T>&ARR、INT サイズ、T値){ // 再度挿入バイナリ探索の安定性を確保するために INT ARRAYSIZE = arr.size(); IF(ARRAYSIZE == 0 ||サイズ<= 0 || <ARRAYSIZE サイズ) 戻りELEMENT_NOT_FINDと、 INT始める= 0 ; // トップ要素のインデックス int型エンド=サイズ; // の最後の要素のインデックス ながら(<開始終了){ int型ミドル=(+終了を始めます) / 2 ; IF(値< ARR [中央]){ 終了 = ミドル。 } 他{ // 値> = ARR [中間] 始める=中央+ 1 。 } } // この時点で開始終了== 返し始めます。 } #endifの / * SRC_BINARYSEARCH_H_ * /