四個O n 2 級別的排序效能測試

2021-09-01 06:01:13 字數 2721 閱讀 5020

測試用例:

#ifndef optional_02_shell_sort_sorttesthelper_h

#define optional_02_shell_sort_sorttesthelper_h

#include #include #include #include #include using namespace std;

namespace sorttesthelper

// 生成乙個近乎有序的陣列

// 首先生成乙個含有[0...n-1]的完全有序陣列, 之後隨機交換swaptimes對資料

// swaptimes定義了陣列的無序程度

int *generatenearlyorderedarray(int n, int swaptimes)

return arr;

}// 拷貝整型陣列a中的所有元素到乙個新的陣列, 並返回新的陣列

int *copyintarray(int a, int n)

// 列印arr陣列的所有內容

templatevoid printarray(t arr, int n)

// 判斷arr陣列是否有序

templatebool issorted(t arr, int n)

// 測試sort排序演算法排序arr陣列所得到結果的正確性和演算法執行時間

templatevoid testsort(const string &sortname, void (*sort)(t, int), t arr, int n)

}#endif //optional_02_shell_sort_selectionsort_h

插入排序:基本思想:將乙個記錄插入到已排好序的有序表中,從而得到乙個新的、記錄數增1的有序表。

時間複雜度為o(n^2),若待排記錄序列為正序,時間複雜度可提高至o(n);空間上只需要乙個記錄的輔助空間。

#ifndef optional_02_shell_sort_insertionsort_h

#define optional_02_shell_sort_insertionsort_h

#include #include using namespace std;

templatevoid insertionsort(t arr, int n)

return;

}#endif //optional_02_shell_sort_insertionsort_h

氣泡排序:基本思想:首先將第乙個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序,則將兩個記錄交換之,然後比較第二個記錄和第三個記錄的關鍵字。依次類推,直至第n-1個記錄和第n個記錄的關鍵字進行過比較為止。上述過程稱做第一趟氣泡排序,其結果使得關鍵字最大的記錄被安置到最後乙個記錄的位置上。然後進行第二趟氣泡排序,對前n-1個記錄進行同樣操作,其結果是使關鍵字次大的記錄被安置到第n-1個記錄的位置上。一般地,第i趟氣泡排序是從1到n-i+1依次比較相鄰兩個關鍵字,並在「逆序」時交換相鄰記錄,其結果是這n-i+1個記錄中關鍵字最大的記錄被交換到第n-i+1的位置上。判別氣泡排序結束的條件應該是「在一趟排序過程中沒有進行過交換記錄的操作」。

#ifndef optional_02_shell_sort_bubblesort_h

#define optional_02_shell_sort_bubblesort_h#include #include using namespace std;

templatevoid bubblesort( t arr , int n)

n = newn;

}while(newn > 0);

}#endif //optional_02_shell_sort_bubblesort_h

希爾排序與測試:基本思想:先將整個待排記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行一次直接插入排序。可以看出希爾排序其實只是改進了的插入排序,因此上面的插入排序也被稱為直接插入排序。

特點:子串行的構成不是簡單地「逐段分割」,而是將相隔某個「增量」的記錄組成乙個子串行。它通過比較相距一定間隔的元素來工作;各趟比較所用的距離隨著演算法的進行而減小,直到只比較相鄰元素的最後一趟排序為止。

#include #include "sorttesthelper.h"

#include "selectionsort.h"

#include "insertionsort.h"

#include "bubblesort.h"

using namespace std;

templatevoid shellsort(t arr, int n)

h /= 3;

}}// 比較selectionsort, insertionsort和bubblesort和shellsort四種排序演算法的效能效率

// shellsort是這四種排序演算法中效能最優的排序演算法

int main() {

int n = 20000;

// 測試1 一般測試

cout結果分析:

O n 2 級別的排序演算法

o n 2 的排序演算法。效能那麼差,為什麼還要學習?首先,它是基礎,千里之行,始於足下。它編碼簡單,容易實現,是一些簡單情景的首選,它能給我們的問題乙個暴力的解法,這樣的解法也許不是最優的,但是它能給我們想出其他的優化演算法一些啟發,思路。一 選擇排序 選擇排序是在給定的資料集合中,找出最小的值放...

四個級別的 「自由」 程式設計師

這段時間,作為程式設計師的我一直在思考關於工作中 自由程度 的問題,終於我得出了乙個結論,把它分成了四個級別。這四個級別與技術無關。通常來說,只要努力追求,我們都可以成功 晉級 第一級 上班族 大部分程式設計師都是從這一級別開始的,甚至大部分程式設計師會一直停在這個層級。該級別的程式設計師沒有太多自...

DB2 SQL RR RS CS UR四個級別

1.rr隔離級別 在此隔離級別下,db2會鎖住所有相關的紀錄。1.rr隔離級別 在此隔離級別下,db2會鎖住所有相關的紀錄。在乙個sql語句執行期間,所有執行此語句掃瞄過的紀錄都會被加上相應的鎖。在乙個sql語句執行期間,所有執行此語句掃瞄過的紀錄都會被加上相應的鎖。具體的鎖的型別還是由操作的型別來...