插入、歸併排序 《算法導論》

        題記:作爲一個自動化專業的學生,畢業之後從事編程的工作,從C,linux開始,慢慢進入編程的世界,這方面知識的欠缺,靠書籍來彌補,但已不能如學生時代有大量的時間來學習,藉此博客來鞭策自己不斷學習,持之以恆。

        《算法導論》  插入排序

 

========================>          正文    <============================

       插入排序:對於少量元素,插入算法是一個有效的算法。《算法導論》中關於插入排序的介紹非常形象,內容如下:

       “插入排序的工作方式,像許多人排序一手撲克牌。開始時,左手爲空並且桌子上的牌面向下。然後,我們每次從桌子上拿走一張牌並將它插入左手中正確的位置爲了找到一張牌的正確位置,我們從右到左將它與已在手中的每張牌進行比較。”因此拿在手上的牌就是排好的,而桌子上的就是未排序的部分。以下代碼爲C實現。

     

      歸併排序:“分治法的思想,將原問題分解爲幾個規模較小但類似於原問題的子問題,遞歸地求解這些子問題,然後再合併這些子問題的解來建立原問題的解--《算法導論》”

      下面程序實現了插入排序和歸併排序,插入排序函數爲insert_sort,需要注意的地方就是構建已排好序數組的起始位置。歸併排序外部調用的函數爲merge_sort,但內部有兩個版本的細節實現,一個沒有哨兵值,一個有,可以看到擁有這個值,大大簡化了代碼和調試,我首先寫的是merge函數,程序功能出錯也是在判斷兩個子數組誰先結束的問題上。所以如果調用時可以設置這個“無窮大”的值,還是設置爲好。

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章