實現折半插入排序演算法

2021-09-10 21:33:02 字數 2130 閱讀 6937

/**

*    實驗題目:

*        實現折半插入排序演算法

*    實驗目的:

*        領會折半插入排序的過程和演算法設計

*    實驗內容:

*        設計程式,實現折半插入排序演算法。用相關資料進行測試,並

*    輸出各趟的排序結果。

*/#include

#define max_len     (100)                       //  最大長度

typedef int key_type;                           //  定義關鍵字型別為int

typedef char info_type;

typedef struct

rec_type;                                      //  查詢元素的型別

/*-----------------x和y交換------------------*/

void swap_rec(rec_type &x, rec_type &y)         //  引用型別

/*-----------------建立順序表------------------*/

void create_list(rec_type recs, key_type keys, int n)

/*-----------------輸出順序表------------------*/

void disp_list(rec_type recs, int n)

/*-----------------以下運算針對堆排序的程式------------------*/

/*-----------------建立順序表------------------*/

void create_list1(rec_type recs, key_type keys, int n)

}/*-----------------輸出順序表------------------*/

void disp_list1(rec_type recs, int n)

printf("\n");

}/*-----------------對recs[0...n-1]按遞增有序進行折半插入排序---------------------*/

static void bin_insert_sort(rec_type recs, int n)

for(j = i - 1; j >= high + 1; j--)      //  集中進行元素後移

recs[j + 1] = recs[j];

recs[high + 1] = tmp;                   //  插入tmp

}disp_list(recs, n);}}

int main(int argc, char *ar**)

;rec_type recs[max_len];

create_list(recs, a, n);

printf("排序前: ");

disp_list(recs, n);

bin_insert_sort(recs, n);

printf("排序後: ");

disp_list(recs, n);

return 0;

}測試結果:

排序前: 9 8 7 6 5 4 3 2 1 0

i = 1, 插入8, 插入結果: 8 9 7 6 5 4 3 2 1 0

i = 2, 插入7, 插入結果: 7 8 9 6 5 4 3 2 1 0

i = 3, 插入6, 插入結果: 6 7 8 9 5 4 3 2 1 0

i = 4, 插入5, 插入結果: 5 6 7 8 9 4 3 2 1 0

i = 5, 插入4, 插入結果: 4 5 6 7 8 9 3 2 1 0

i = 6, 插入3, 插入結果: 3 4 5 6 7 8 9 2 1 0

i = 7, 插入2, 插入結果: 2 3 4 5 6 7 8 9 1 0

i = 8, 插入1, 插入結果: 1 2 3 4 5 6 7 8 9 0

i = 9, 插入0, 插入結果: 0 1 2 3 4 5 6 7 8 9

排序後: 0 1 2 3 4 5 6 7 8 9

折半插入排序 C 實現經典演算法 折半插入排序

本節用c 實現經典的折半插入排序,也是王道上總結得插入排序的第二種演算法,思路很清晰,首先將使用者輸入儲存在陣列中,然後從陣列第二個元素開始遍歷整個序列,每次將元素跟其左邊鄰居元素比較,如果出現小於其鄰居節點的情況,則用折半得思想找出其應該插入的位置,如下。include include using...

折半插入排序演算法

折半插入排序演算法是直接插入排序演算法的改進 插入元素的位置通過折半查詢確定。折半插入排序演算法的時間複雜程度為o n 2 空間負責程度是o 1 具體演算法如下 資料結構如下 typedef struct elemtype recordtype 陣列array 0 的位置無效,充當輔助儲存空間 vo...

折半插入排序演算法

這個演算法中最難以理解的莫過於,對於查詢演算法的理解了。因為在這種查詢演算法中,相等的情況並沒有單獨的列舉出來跳出迴圈,演算法設計者這樣設計的目的是什麼呢?原來演算法設計者的目的是找到為了找到小於等於查詢值的最大最大值,或者大於等於查詢值得最小值,以便方便的進行插入。如在本個例子中l mid l 0...