希爾排序演算法的具體做法為:假設待排序元素序列有n個元素,取乙個小於n的整數增量值incremen作為間隔,將全部元素分為increment個子序列,將所有距離為increment的元素放在乙個序列中,並對每乙個序列執行直接插入排序。然後縮小increment,重複上述劃分子串行和排序的過程,直到最後increment為1,再執行一次直接插入排序,此時序列已經有序,演算法終止。
由於increment開始取的值較大,但每個子串行中的元素較少,排序速度較快。到了排序後期,increment值逐漸變小,子串行中元素逐漸增多,但由於前面的工作使得整個序列大部分元素都是有序的,減少了元素移動的次數,排序仍然是較快的。
public希爾排序的時間複雜度最差為o(n^2),最好情況時o(n),平均時間複雜度為o(n^1.3)。class
shellsort
}public
static
void shellsort(int arr, int
dk) arr[index + dk] =insertnum;}}
}
希爾排序空間複雜度o(1)。
由於希爾排序會將元素分組再執行插入排序,組內排序後會改變元素在整個陣列的順序,所以希爾排序是不穩定的。
常用排序演算法 希爾排序
希爾排序 簡單描述 希爾排序是對插入排序的改進,插入排序每次只能移動一位,速度較慢 通過對資料進行分組,可以實現跨越式移動。基本思想 1 首先是步長的選擇,首先是陣列長度的一半,然後再每次減半最後直到步長為1 2 按照步長對資料進行插入排序 時間複雜度 比簡單插入排序 o n 2 要好,是在o nl...
常用排序演算法 希爾排序
希爾排序算是插入排序的一種,是改進版的直接插入排序,和直接插入排序不同的是它是按組進行插入排序的。步驟如下 取乙個整數d1 n 2,將元素分成d1個組,每組相鄰元素之間距離d1,然後在每組內部進行直接插入排序。取第二個整數d2 d1 2再將元素分成d2個組,然後再在每組內部進行插入排序。重複上面的步...
排序演算法 希爾排序
如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...