各類演算法排序詳解歸併排序 自帶時間複雜度測試

2021-10-10 23:05:34 字數 2361 閱讀 9549

//時間複雜度  o(n*log2n) 

//穩定程度: 穩定

/*確定分界點,中間位置

兩端排序

歸併,合二為一*/

#include#includeusing namespace std;

int tmp[250001];

void sort(int list, int l, int r);

int main()

clock_t start_time = clock();

sort(a,0,250000-1);

clock_t end_time = clock();

//for (int i = 0; i < 200000; i++)

// system("pause");

}void sort(int list, int l, int r)

//時間複雜度   o(n*log2n

//穩定性:不穩定

//**於分治思想

/*確定分界點

調整區間

遞迴處理兩端

演算法思想,快排是基於氣泡排序的優化,氣泡排序從一側開始進行,而快排是兩邊同時進行從而時間複雜度折半,同時包含了二分的思想在裡面*/

#include#includeusing namespace std;

void sort(int list, int l, int r);

int main()

clock_t start_time = clock();

sort(a,0,80000-1);

clock_t end_time = clock();

for (int i = 0; i < 80000; i++)

system("pause");

}void sort(int list, int l, int r)

sort(list, l, j), sort(list, j + 1, r);

}

#include#includeusing namespace std;

void sort(int list, int n);

int main()

clock_t start_time = clock();

sort(a, 10000);

clock_t end_time = clock();

for (int i = 0; i < 10000; i++)

system("pause");

}void sort(int list, int n)

}

從當前未排序的整數中找到最小的整數,將它放在已排序的整數列表的最後。

#include#includeusing namespace std;

void sort(int list, int n);

int main()

clock_t start_time = clock();

sort(a, 10000);

clock_t end_time = clock();

for (int i = 0; i < 10000; i++)

system("pause");

}void sort(int list, int n)

}swap(list[i], list[min]); //掃瞄一遍結束後,交換一次

}}

氣泡排序:

氣泡排序(bubblesort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數 放後。

然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。

在第二趟:仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前中,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到乙個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。

選擇排序

第一次從下標為0的開始下標為0的這個數與後面的n-1個進行比較;找出最小或者最大的放在下標為0的這個位置;第二次從下標為1的開始比較;查詢剩下的最大或者最小值;放在下標為1的位置;以此類推;直到排序完成。

總結從上兩段**可以看出,它們處於同乙個數量級,即時間複雜度是相同的,都用了兩層迴圈,為o(n^2)(n:排序個數); 但是內層迴圈中,氣泡排序的互換位置的操作從概率上講要明顯多於選擇排序. 整個排序演算法,選擇排序換位操作為o(n),氣泡排序為o(n^2/2). 所以綜合來講選擇排序的時間效率要高於氣泡排序.

排序演算法 詳解歸併排序演算法

原理,首先將陣列遞迴的分解,直到達到終止條件返回,然後將分成兩段的陣列,進行比較,按從小到大的順序放在臨時陣列裡,然後將這一段排好順序的陣列複製給原來的陣列,繼續返回上一層,進行排序。直到完全完成遞迴。第二段結束了,第一段還有 if begin1 end1 第一段結束了,第二段還有 else 每次都...

排序演算法詳解 歸併排序 Merge Sort

核心思想 分治。主題流程 先將乙個序列分成很多個不能再分割的子串行,將各個子串行分別排序後再將子串行合併。其實就是重複兩個步驟 分合併。首先是第乙個小問題,怎麼分?比如說乙個序列 12 23,1,44,233,10,9,8。我們先分成兩段 12 23,1,44 和 233,10,9,8,發現還能再分...

基本排序演算法 歸併排序詳解

歸併排序的核心就是將待排序元素先不斷分割直至不可分割,然後左右合併歸一。本質上是分治和遞迴的使用。話不多說,直接上 include includeusing namespace std class solution else 迴圈結束表示某乙個走完了,剩下的直接放入尾部 while i mid wh...