作為一名演算法菜雞,程式設計菜雞,在知道希爾排序的原理後,我去實現它,中間碰到一些問題
特此記錄下來。
原理就是把間隔為n的數去比較,然後把小的放在前面,至於n的計算公式我用的是n=n/3+1;
然後我就想當n=1時結束,所以我最外層用了乙個while,然後裡面for迴圈比較,看下下面錯誤的**。
#includeusing namespace std;
void swap(int &a, int &b)
void xier(int a, int n)
} k = k/ 3 + 1; }}
void main()
; xier(a, 8);
for (int i = 0; i < 7; i++)
system("pause");
}
這段**如果用陣列6 5 4 3 2 1來可以正確排序,很不幸的是,我就是拿這個來分析的。但我換了
乙個測試陣列後發現,這不對啊。然後我手動走了一遍,發現當n=1時還是要在while裡走一遍的。
然後我就想我需要乙個判斷的量,而且由於最近在學c++ primer,我就想到了用bool量來做判斷條件,而且
關鍵是n一定會等於2,於是我寫出了下面的**、
#includeusing namespace std;
void swap(int &a, int &b)
void xier(int a, int n)
if (k == 1)
judge = false;
if (a[i]>=a[i+k])
}k = k/ 3 + 1; }}
void main()
; xier(a, 8);
for (int i = 0; i < 7; i++)
system("pause");
}
終於成功,所以寫**前還是要動筆的。 希爾排序演算法 過程輸出
轉一段 幫助理解shell排序 結構輸出 original array 12 2 20 19 28 30 12 42 35 1.n 9 gap 4 i 4 j 0 2.n 9 gap 4 i 5 j 1 3.n 9 gap 4 i 6 j 2 12 2 12 19 28 30 20 42 35 4....
排序 希爾排序
希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...
排序 希爾排序
縮小增量排序 待排序列按關鍵字基本有序時,直接插入排序的效率很高 希爾排序思想 將整個待排記錄分割為若干子串行分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行一次直接插入排序,就可以完成整個排序工作 增量序列中的值沒有除1以外的公因子,且最後乙個增量必須等於1 子串行的構成不是逐...