測試用例:
#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語句執行期間,所有執行此語句掃瞄過的紀錄都會被加上相應的鎖。具體的鎖的型別還是由操作的型別來...