希爾排序
coding實現
例項測試
謝爾排序(shellsort)的名稱源於它的發明者donald shell,他通過比較相距一定間隔的元素來工作。由於直接插入排序在元素基本有序的情況下(接近最好情況),效率是非常高的,因此希爾排序在時間效率上有較大提高。該方法的基本思想是:先將整個待排元素序列切割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。
先看乙個例子:用shell_sort對進行排序:
由此便可以對乙個序列進行排序。
void shell_sort(int *p, int
len)
p[j] = tmp;}}
}
上面**中的 gap 增量叫做shell增量,增量的使用對於演算法效能有影響,使用謝爾增量時,謝爾排序的最壞情形執行時間為 o(n^2),hibbard 提出乙個稍微不同的增量序列1,3,7,…2^k-1..使用 hibbard 增量的謝爾排序的最壞情形執行時間為o(n^1.5)
/*
* 問題描述:shell排序
* c/c++ 語言
** @author erice_s
* @date
2017/10/21**/
#define _crt_secure_no_warnings
#include
#include
#include
void shell_sort(int
*p, int len)
p[j] = tmp;}}
}void print(int
*a, int len)
}int main(void)
; int len = sizeof(array) / sizeof(*array);
printf("sort before:\n");
print(array, len);
shell_sort(array, len);
printf("sort after:\n");
print(array, len);
system("pause");
return
0;}
測試結果: 希爾排序(Shell Sort)
希爾排序 shell sort 又叫做縮小增量排序 diminishing increment sort 是一種很優秀的排序法,演算法本身不難理解,也很容易實現,而且它的速度很快。基本思想 先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中...
希爾排序 shellsort
希爾排序 shellsort 又叫增量遞減 diminishing increment 排序,是由d.l.shell發明的,這個演算法是通過乙個逐漸減小的增量使乙個陣列逐漸趨近於有序從而達到排序的目的。假設有乙個陣列int data 16 首先將這個增量設為16 2 8,這樣就將這個陣列分成了8個子...
希爾排序(ShellSort)
希爾排序 shellsort cpp view plain copy include shellsort.h include print.h 希爾排序,分組進行插入排序,最後一步仍然是插入排序,但是因為之前的操作使逆序數減少,所以相對單純的插入排序效率高。void shellsort inta,in...