資料結構上機 希爾排序(含監視哨版本)

2021-10-12 07:08:27 字數 1400 閱讀 7629

首先要明確一下什麼是監視哨

這個詞很容易望文生義

錯誤地認為是監視比較的值

查閱資料才發現

監視哨的意義是防止下標越界,提高速度

在插入排序中,

取用r[0]作為監視哨,就可以在迴圈中減少一次判斷j>0的條件,從而提高速度

而在本題之中,採取五個監視哨的目的在於

希爾排序是跳躍的,最大的區間d[0]是5,所以只要防止j-5<0即可,不過還是存在bug!!

網上也找不到多監視哨的希爾排序,著實燒腦。

經過我半小時+的禿頭思考後,發現問題在於監視哨的key值,每個監視哨都必須初始化0,當然作為r[0]的監視哨還擔任儲存單元的雙重使命,也可以不初始化。

自此,程式順利完成

//希爾排序的程式**

#include

//順序表結構型別定義

typedef

int datatype;

typedef

struct

rectype;

const

int n=10;

const

int d1=5;

void

create

(rectype,

int)

;void

print

(rectype,

int)

;void

shellsort

(rectype,

int)

;int

main()

;//設定3趟的增量

create

(r,n)

;//建立存放記錄的順序表

printf

("排序前的資料:");

print

(r,n)

;//輸出排序前的記錄表

shellsort

(r,d)

;//希爾排序

printf

("排序後的資料:");

print

(r,n)

;//輸出排序後的記錄表

}//建立順序表

void

create

(rectype r,

int n)

//輸出順序表

void

print

(rectype r,

int n)

//新增希爾排序演算法

void

shellsort

(rectype r,

int d)

for(k=

0;k<

3;k++

) r[j+d[k]

+d1-1]

.key=r[0]

.key;}}

}}

C語言 希爾排序 使用監視哨

希爾排序 shell s sort 是插入排序的一種又稱 縮小增量排序 diminishing increment sort 是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於1959年提出而得名。具體思想就是從無序的陣列中每隔一段間隔挑出來乙個數字...

資料結構 希爾排序!!!

希爾排序是將一組資料進行分組,再將分組的資料進行排序,這樣資料就會逐漸的趨向有序,當分組的個數為1的時候將整個陣列排序一遍,那麼整個陣列就排序好了。基本思想 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基...

資料結構 希爾排序

1 希爾排序是在直接插入排序的基礎上改良而來的,直接插入排序需要記錄基本有序的情況下才能變得很高效,希爾排序便是採取跳躍分割的策略,將相距 增量 的元素組成乙個子串行,這樣才能保證最後進行直接插入排序時的序列是基本有序的。希爾排序的時間複雜度是 2 希爾排序實現演算法 include include...