思想簡單描述:
在直接插入排序演算法中,每次插入乙個數,使有序序列只增加1個節點,並且對插入下乙個數沒有提供任何幫助。如果比較
相隔較遠距離(稱為增量)的數,使得數移動時能跨過多個元素,則進行一次比較就可能消除多個元素交換。d.l.shell於
2023年在以他名字命名的排序演算法中實現了這一思想。演算法先將要排序的一組數按某個增量d分成若干組,每組中記錄的
下標相差d.對每組中全部元素進行排序,然後再用乙個較小的增量對它進行,在每組中再進行排序。當增量減到1時,整個
要排序的數被分成一組,排序完成。下面有幾種用c語言實現的方法:
方法一:
嚴格按照定義來實現的演算法
void shellsort1(int *array, int len)
array[k+grap] = tmp;}}
} }}
方法二:**量太大了,不夠簡潔清晰。因此進行下改進和優化
void shellsort2(int *array, int len)
array[j+k] = tmp;
} }}
方法四:還可以再次優化:
void shellsort4(int *array, int len)
} }}
另一種方法是根據其它論壇上進行整理的,也是比較容易理解一種方法
void shellsort(int *array, int len)
array[j+k] = tmp;
} k = k/2;/*縮小間距值*/
}}
排序演算法 希爾排序
如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...
排序演算法 希爾排序
摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...
排序演算法 希爾排序
希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...