思想是直接插入排序,即每次拿乙個數字向已排序好的數字中插入,採用迴圈不變式的設計思想。
迴圈不變式:一般而言,用這個式子表示希望得到的結果,如果在迴圈的每一步,這個式子都是正確的,那麼迴圈結束後,這個式子也正確,並得到了期望的結果。
如何證明迴圈的每一步式子都是正確的?
需要證明式子滿足三個性質:
初始化:迴圈的第一次迭代之前,它為真。
保持:如果迴圈的某次迭代之前它為真,那麼下次迭代仍然為真。
終止:證明迴圈終止時,是期望結果。
**:
package com.zjq.arithmetic.sort;
public class insert_sort ;
insert_sort insert_sort=new insert_sort();
eg=eg=insert_sort.insertsort(eg);
for(int m=0;m=0&&array[j]>k)
array[j+1]=k;
} return array;
}}
只要迴圈之前array[i-1](下標是原陣列的0至i-1)是排序好的陣列,那麼下次迴圈得到
array[i](下標是原陣列的0至i)
仍然是排序好的陣列,並且迴圈結束時得到的是整個排序好的陣列。
此**滿足迴圈不變的三個性質。
1 初始化:迴圈下標從1開始,初始時候下標0,陣列只有乙個數array[0],當然是排序好的。
2 保持:每次迴圈是將新的數字插入到上一次排序好的陣列中,得到讓然是排序好的陣列。
3 終止;迴圈終止時候,得到的是原陣列排序好的陣列,符合期望。
排序 插入排序(迴圈不變式)
插入排序的思想是構造乙個迴圈不變式,可用撲克牌的例子來解釋,左手為已經排好序的牌,右手為未排好序的牌,分別將右手中的牌依次一張一張地插入到左手,將左手中的每一張牌依次和這張牌比較,以此來確定這張牌在左手中的正確順序,然後進行下一張牌,在這個過程中,左手中的牌始終是排好序的,即不變的,稱為迴圈不變式 ...
插入排序與迴圈不變式
首先,給出本文要使用的例子,對乙個陣列a進行公升序的插入排序 演算法的c語言描述 cpp view plain copy void insersort inta,intlength a j 1 key 迴圈不變式是用於檢驗演算法的正確性的。在演算法中,有一些特定的性質 也是我們我們實現這個演算法最關...
《演算法基礎 開啟演算法之門》一2 3 迴圈不變式
對於線性查詢的3個演算法,我們能很容易地看到每個演算法均能生成正確的結果。但是有時候生成正確的結果看起來有點難。這涉及一系列技術,在這裡不能一一講解。證明正確性的乙個常用方法是使用迴圈不變式證明 即證明迴圈的每次迭代之前迴圈不變式為真。迴圈不變式能夠幫助我們證明正確性,關於迴圈不變式,我們必須證明以...