用希爾排序對數字進行排序.
技術要點 :
希爾排序是在直接排序的基礎上做的改進, 也就是將要排序的序列按固定增量分成若干組, 等距離者在同一組中, 然後在組內進行直接排序. 這裡的固定增量從 n/2 (n 為數組元素個數) 開始, 以後每次縮小到原來一半.
範例代碼 :
- #include
- #include
- #include
- using namespace std;
- int _shellSort(int *s, int n) {
- int tmp, j, d, count=0;
- d = n/2;
- while(d>0) {
- for(int i=d; i
- j = i-d;
- if(j>=0) {
- tmp = s[i];
- while((j>=0) && (tmp < s[j])) {
- count++;
- s[j+d] = s[j];
- j = j-d;
- }
- s[j+d] = tmp;
- }
- }
- d = d/2;
- }
- return count;
- }
- void main() {
- int a[10] = {25, 12, 36, 45, 2, 9, 39, 22, 98, 37};
- printf("The original order: \n");
- for(int i=0; i<10; i++)
- printf("%2d ", a[i]);
- printf("\n");
- int c = _shellSort(a, 10);
- printf("After 希爾插入法 sorting: \n");
- for(int i=0; i<10; i++)
- printf("%2d ", a[i]);
- printf("\nTotal swap time:%d\n", c);
- }
補充說明 :
* [ 資料結構 小學堂 ] 排序 : 希爾排序
沒有留言:
張貼留言