1. 程式人生 > 實用技巧 >基於Python實現環形佇列高效定時器

基於Python實現環形佇列高效定時器

技術標籤:演算法演算法排序演算法

006 希爾排序

一、演算法介紹

希爾排序是直接插入排序的改進版本,也稱遞減增量排序演算法。其基本思想是:按照一定間隔將待排序序列分為若干組,再對每組進行插入排序。一輪排序結束後,縮小間隔再進行相同的操作。序列在一輪輪的分組排序後逐漸變得有序,最後再對整個序列進行直接插入排序。

二、演算法分析

初始間隔一般取序列長度的一半,一輪排序結束後將 序列減半。最後間隔為一時即對整個序列直接插入排序。序列大致有序時,直接插入排序就比亂序序列提高不少時間效率,因為直接插入排序在比較時遇到更小元素時就直接結束這一輪遍歷插入,否則就需要繼續比較和移動。序列大致有序時,遇到前者的概率更大,所以希爾排序比直接插入排序的時間效率更高。但在不同的插入排序過程中,相同的元素可能在各自的插入排序中移動,最後其穩定性就會被打亂,所以希爾排序是不穩定的。

如圖所示
在這裡插入圖片描述

三、演算法程式碼

void ShellSort(int R[], int n)
{
    int i, j, gap;
    int tmp;
    gap = n/2; //分組間隔
    while(gap>=1)
    {
        for(i=gap; i<n; i++)
        {
            tmp = R[i];
            j = i-gap;
            while(j>=0 && tmp<R[j])
            {
                R[j+gap]
= R[j]; j = j-gap; } R[j+gap] = tmp; } gap = gap/2; //一輪結束後,間隔減半 } }

執行結果
在這裡插入圖片描述