/**
* 實驗題目:
* 實現希爾排序演算法
* 實驗目的:
* 領會希爾排序的過程和演算法設計
* 實驗內容:
* 設計程式,實現希爾排序演算法。用相關資料進行測試,並
* 輸出各趟的排序結果。
* 基本思想:
* 希爾排序是針對直接插入排序演算法的改進,該方法又稱縮小增量排序。
* 先取乙個小於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實現
希爾排序演算法是插入排序的一種改進,希爾排序將陣列的下標按照一定的增量排序,將乙個陣列分成幾個部分,對其中各個部分都只用使用插入排序的思想,當在當前增量情況下各個部分排序完成,則按照一定規則縮小增量,直至增量為一時,陣列就只有乙個部分,完成這部分的排序即可完成陣列的排序。增量選取無硬性要求,在這裡增...