算法導論之算法基礎學習一

  • 插入排序
    • 原理:有一個已經有序的數據序列,要求在這個已經排好的數據序列中插入一個數,但要求插入後此數據序列仍然有序。
    • 代碼實例:

     

 

  • 循環不變式
    • 目的:主要是來幫忙我們理解算法的正確性;
    • 證明:
      1. 循環的第一次迭代之前,它爲真;
      2. 循環的某次迭代之前爲真,那麼下次迭代之前也爲真;
      3. 循環終止時,也爲真
    • 結論:只要證明中的三點成立,那麼就可以證明我們插入算法的正確性;
  • 我們需要怎麼做呢??
  • 聲明2個數組,一個原數組(未正確排序的數組),一個子數組(已經排序的數組);
    • 第一點證明:第一次迭代之前,也就是i=1之前;因爲第一次是不需要做比較的,因爲第一次插入的時候子數組裏面就一個數據,沒有其他數據做比較,並且當前插入的數據和原來的數組一樣,只是已經排好順序了,所有成立。
    • 第二點證明:for循環的邏輯就是在i=n並且while成立的時候;將左邊的數向右邊移動一個位置,n+1顯然也成立。
    • 第三點證明:循環最後得到的子數組和原來的數組裏面的數字是一樣,沒有改變,只是順序是排好的,那麼結論成立。
    • 綜合上面3點可以根據循環不變式證明插入算法的正確性;
  • 注:插入算法僅僅針對少量的數據效果比較好,如果是大量數據的排序,建議使用其他順序算法。

 

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