ps:後面的元素的數值比前面的元素的小就插入
1.直接插入排序
#include
#define maxsize 20 //定義乙個順序表最大長度為20
#define lh(a,b) ((a)<(b)) //定義lh(a,b)就是afor(i=2;i<=l.length;i++)//從第二個元素開始和前面的元素比較}}
int main()
演算法優劣分析:
兩個for迴圈中,最壞情況下比較次數約為n,移動次數約為n,所以時間複雜度為o(n²)
2.折半插入排序
#include
#define maxsize 20
#define lh(a,b) ((a)<(b))
typedef int keytype;
typedef struct
redtype;
typedef struct
sqlist;
//以上定義同上
void binsertsort(sqlist &l)
for(j=i-1;j>=high+1;j--) //只能在前面插入
l.r[j+1]=l.r[j]; //迴圈後移
l.r[high+1]=l.r[0];}}
int main()
3.希爾排序
基本思想:現將整個待排記錄序列分割成若干個子串行分別進行直接插入排序,待整個序列「基本有序」時,再對全體記錄進行一次直接插入排序。
通過間隔分組的方法構建子串行,即是將相隔某個「增量」的元素構成乙個子串行。
#include
#define maxsize 20
#define lh(a,b) ((a)<(b))
typedef int keytype;
typedef struct
redtype;
typedef struct
sqlist;
//同上
void shellinsert(sqlist &l,int dk)}}
void shellsort(sqlist &l,int dlta) //分子序列函式
}int main()
資料結構第十章 內部排序
一 內部排序 是乙個逐步擴大記錄有序序列長度的過程 其中,希爾排序不穩定 1.直接插入排序 o n n o 1 基於順序查詢的排序方法 將乙個記錄插入乙個已經排好序的有序表l中,從而得到乙個新的 記錄數增加1的有序表 特點是 從2開始乙個個判斷是否比前乙個元素要大,如果比前面的小的話就要以0單元為哨...
資料結構 第十章 排序作業
1 若表r在排序前已按鍵值遞增順序排列,則 演算法的比較次數最少。a 直接插入排序 b 快速排序 c 歸併排序 d 選擇排序 2 對各種內部排序方法來說,a 快速排序時間效能最佳 b 歸併排序是穩定的排序方法 c 快速排序是一種選擇排序 d 堆排序所用的輔助空間比較大 3.排序演算法的穩定性是指 a...
資料結構(嚴蔚敏)第十章 內部排序
直接插入 左邊有序,右邊無序,從右邊取數依次插入有序中 void insertsort int list,int len list j temp 折半插入 插入點採用折半查詢的方式 void insertsort2 int list,int len for int j i 1 j low j lis...