第二章 2 1插入排序

2021-07-25 14:44:33 字數 1182 閱讀 2555

2.1-1 以圖2-2為模型,說明insertion-sort在陣列a=上的執行過程。

31 31 41

31 41 59

26 31 41 59

26 31 41 58 59

2.1-2重寫過程insertion-sort,使之按非公升序(而不是非降序)排序。

insertion-sort

for j=2

to a.length

a[i+1]=key

}

2.1-3 考慮以下查詢問題:

輸入:n個數的乙個序列a=和乙個值v。

輸出:下標i使得v=a[i]或者當v不在a中出現時,v為特殊值nil。

寫出線性查詢的偽**,它掃瞄整個序列來查詢v。使用乙個迴圈不變式來證明你的演算法是正確的。確保你的迴圈不變式滿足三條必要的性質。

迴圈不變式主要用來幫助我們理解演算法的正確性。關於迴圈不變式,我們必須證明三條性質:

初始化:迴圈的第一次迭代之前,它為真。

保持:如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真。

終止:在迴圈終止時,不變式為我們提供乙個有用的性質,該性質有助於證明演算法是正確的。

for(int i=0;i

length;i++)

else

}

2.1-4 考慮把兩個n位二進位制整數加起來的問題,這兩個整數分別儲存在兩個n元陣列a和b中。這兩個整數的和應按二進位制形式儲存在乙個(n+1)元陣列c中。請給出該問題的形式化描述,並寫出偽**。

對a[i]位和b[i]位相加,如果得2向前進一位(flag=1),c[i]=0。如果得1,c[i]=1+flag,flag=0。如果得0,c[i]=0+flag,flag=0。

flag=0;

for(int i==0;iif(a[i]==1&&b[i]==1)

else

if(a[i]==0&&b[i]==0)

else

else

}}

演算法導論 第二章 插入排序

1.插入排序類似於整理撲克牌 排列好順序的撲克和待排序的撲克 2.插入排序 insertion sort 引數是乙個陣列a 1.n 共n個數,輸入的各個數字原地排序 sorted in place 分為排好序的和待排序的,每次取乙個待排序元素,找到插入的位置,插入已排好序的部分中。元素取完程式結束,...

演算法導論(平話)第二章演算法基礎 插入排序

前言 對於作者這類學術很渣,算導簡直就是一本晦澀難懂的書,作者根據自己的有限的理解對每一章節做平話描述。插入排序 元素 序列 引數 原址 迭代 偽 此文不做專業名詞的闡述,意在幫助很多初次接觸的程式設計師用白話的方式理解插入排序。1.白話概念 從一堆東西中 可以是任何物質 乙個個取出,邊取邊按照一定...

演算法導論 第二章演算法基礎(1)插入排序

輸入 n個數的乙個序列 輸出 輸入序列的乙個排序 滿足 a1 a2 a n a prime 1 le a prime 2 le cdots le a prime n a1 a 2 an 插入排序原址排序輸入的數,演算法在陣列a aa中重排這些數,在任何時候,最多只有其中的常數個數字儲存在陣列外面。f...