クイック:O(N 2)
真正正确的快速排序: 書式#include <iostreamの> の#include <cstdioを> 使用して 名前空間はstd; INT [ 100 ]。 / * ボイドスワップ(INT A、INT B){ int型TMP。 TMP = A; = B; B = TMP。 } * / ボイドクイック(intです左、int型右){ int型I、J、Tは、 もし(左> 右) を返します。 INTの TEMP = [左]。 I = 左; J = 右。 同時に(iは< j)を{ ながら([J]> TEMP && I < J) J - 。 [i]は = [j]を。 一方、([i]が<TEMP && iが< j)を I ++ 。 [j]は = [I]。 } [I] = TEMP。 クイックソート(左、I - 1 )。 クイック(I + 1 、右)。 } int型のmain(){ int型NUM。 cinを >> NUM。 以下のための(int型 I = 1; I <= NUM; iは++ ) scanf_s(" %のD "、および[I])。 クイックソート(1 、NUM)。 用(int型 I = 1 ; I <= NUM iが++ ) COUT << [I] << ENDL。 リターン 0 ; }
挿入ソート:O(N- 2)
#include <iostreamの> する#include <cstdioを> 使用して名前空間STD、 INT A [100]; int型のmain(){ int型N-; CIN N - >>; のための(INT I = 0、I <N - 、Iは++) CIN >> A [I]、 のために(INT I = 1; I <N - 、Iは++){//私はそれが最初のいくつかの数字が比較さであることを意味 IF([I] <[-I 1]){ int型J = I- 。1; INT X = A [I]; 一方、(Jは> = 0 && [J]> X){ [J] = [Jの+ 1]; //数が数後により大きい前ケースを見つける 後の図移動後。 J ,; } A [+ J. 1] = X; //インサートの数を比較 } } のための(I = 0 int型、I <N - 、I ++)は COUT << [I] << ENDL、 0を返します;
マージソート:O(nlogn)
書式#include <iostreamの> の#include <ベクトル> 使用して 名前空間はstdを、 ボイドマージ(ベクトル< INT >&ARR、int型の L、INT半ば、INT R){ intは *ヘルプ= 新しい INT(R-L + 1 )。 int型 P1 = L、P2 =ミッド+ 1、I = 0 ; 一方(P1 <=ミッド&& P2 <= R){ ヘルプ[I ++] =のARR [P1]> [P2] ARR?ARR [P2 ++]:ARR [P1 ++ ]; } 一方(P1 <= MID) ヘルプ[I++] =のARR [P1 ++ ]。 一方(P2 <= R) ヘルプ[I ++] =のARR [P2 ++ ]。 以下のために(int型 iは= 0 ; I <R-L + 1 ; iは++ ) { ARR [L + I] = ヘルプ[I]。 } } ボイド sortprocess(ベクトル< INT >&ARR、INT L、INT R) { 場合(L < R){ int型ミッド= 1 +((RL)>> 2)。 // (L + R)/ 2 + sortprocess(ARR、L、MID)。 sortprocess(ARR、ミッド1 、R)。 (ARR、L、中、R)マージ。}} ボイドマージ(ベクトル< INT >&ARR、int型の L、INT R){ 場合(arr.size()< 2 ) リターン。sortprocess(ARR、L、R);} int型のmain(){ ベクトル < INT > ARR。 int型 nは、一時; cinを>> N; // 输入N个数 ため(int型 i = 0 ; iがn <; iは++ ) { CIN >>温度を、 // 输入数据 arr.push_back(TEMP)。 } マージ(ARR、0、arr.size() - 1 )。 以下のために(int型私= 0 ; i)は、(arr.size <; Iは++ ) COUT << ARR [I] << ENDL。 システム(「一時停止」)。 リターン 0 ; }