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