個人對希爾排序的理解
- 是將待排序 分成若干的子系列排序(是由相隔的個參數(shù)缴淋,分割而成)。
- 每次 排序子序列(相隔的參數(shù)減少一半)
- 最終 會對全體元素進行一次直接插入排序响巢, 因為在 (元素大部分有序的情況下描滔,直接插入排序效率很高),所以希爾排序時間效率就快
算法 時間復雜度 與 自己想法
- 由于 希爾排序 基于 插入排序的一種算法踪古,當相隔的參數(shù)為1含长,過程就為插入排序。
- 所以 希爾排序 優(yōu)化點可以根據(jù) 實際的情況 和 待排序的元素有序程度伏穆。 來單獨設計 相隔的參數(shù)
- 在 待排序列 有序的情況下 速度很快拘泞, 當然在最差的情況下 也比 直接插入排序快。
- 希爾排序的時間復雜度是:O(n^1.2)
- 算法 不穩(wěn)定
#include <stdio.h>
void shellsort(int a[], int n)
{
int j, gap;
for (gap = n / 2; gap > 0; gap /= 2) //空開幾個
for(j = gap; j < n; j++) //掃一遍
if (a[j] < a[j-gap]) //比較 倆
{
int temp = a[j];
int k = j - gap;
while (k >= 0 && a[k] > temp) ///讓最小的 移動到最前面
{
a[k + gap] = a[k];
k -= gap;
}
///最小的復制過來
a[k + gap] = temp;
}
}
int main(){
int a[10] = {2,5,6,7,8,9,0,1,3,4};
shellsort(a, 10);
int i ;
for (i = 0; i < 10; i++) {
printf("%d",a[i]);
}
printf("\n");
return 0;
}
-
swift
import UIKit func shellsort(inout a : [Int]){ let n = a.count-1 for(var gap = n / 2; gap > 0; gap /= 2){ for j in gap...n { if a[j] < a[j-gap]{ let tmep = a[j] var k = j - gap while k >= 0 && a[k] > tmep {//掃一遍 好填最小值 a[k + gap] = a[k] k -= gap } a[k + gap] = tmep } } } } var a = [2,5,6,7,8,9,0,1,3,4] shellsort(&a)
-
看我那么可愛n(≧▽≦)n
關注我的微薄 (梁同桌):http://weibo.com/tongrenyinsheng
ios 個人寫的app (同人音聲)ASMR音樂