實現希爾排序演算法

2021-09-10 21:41:30 字數 1934 閱讀 4499

/**

*    實驗題目:

*        實現希爾排序演算法

*    實驗目的:

*        領會希爾排序的過程和演算法設計

*    實驗內容:

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

*    輸出各趟的排序結果。

*    基本思想:

*       希爾排序是針對直接插入排序演算法的改進,該方法又稱縮小增量排序。

*    先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。

*    所有距離為dl的倍數的記錄放在同乙個組中。先在各組內進行直接插人排序;

*    然後,取第二個增量d2

#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 shell_sort(rec_type recs, int n)

recs[j + d] = tmp;

}printf("  d = %d: ", d);

disp_list(recs, n);

d = d / 2;                      //  減小增量}}

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

;rec_type recs[max_len];

create_list(recs, a, n);

printf("排序前: ");

disp_list(recs, n);

shell_sort(recs, n);

printf("排序後: ");

disp_list(recs, n);

return 0;

}測試結果:

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

d = 5: 4 3 2 1 0 9 8 7 6 5

d = 2: 0 1 2 3 4 5 6 7 8 9

d = 1: 0 1 2 3 4 5 6 7 8 9

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

排序演算法 python實現希爾排序

coding utf 8 希爾排序,穩定性 是不穩定的 defshell sort alist n len alist gap n 2 取步長,總長度除2,取整數 i gap for i in range gap,n i gap,gap 1,gap 2,gap 3 n 1 while if alis...

java希爾排序演算法實現

希爾排序嚴格來說是基於插入排序的思想,又被稱為縮小增量排序。具體流程如下 1 將包含n個元素的陣列,分成n 2個陣列序列,第乙個資料和第n 2 1個資料為一對.2 對每對資料進行比較和交換,排好順序 3 然後分成n 4個陣列序列,再次排序 4 不斷重複以上過程,隨著序列減少並直至為1,排序完成。假如...

希爾排序演算法Java實現

希爾排序演算法是插入排序的一種改進,希爾排序將陣列的下標按照一定的增量排序,將乙個陣列分成幾個部分,對其中各個部分都只用使用插入排序的思想,當在當前增量情況下各個部分排序完成,則按照一定規則縮小增量,直至增量為一時,陣列就只有乙個部分,完成這部分的排序即可完成陣列的排序。增量選取無硬性要求,在這裡增...