排序演算法 一 插入排序法 折半插入排序法

2021-10-02 15:11:18 字數 1525 閱讀 5091

約定:

假設資料中有n個資料元素(關鍵字)。排列演算法中,將序列中各關鍵字值依次存放於型別為keytype的陣列元素k[1], k[2], k[3], …, k[n]中。

排序結果按照資料元素(關鍵字)值的大小,從小到大排序。

核心思想:第 i 趟排序將序列中第 i+1 個元素 ki+1 ( i = 1, 2, …, n-1 ) 插入到乙個已經按值有序的子串行 ( k』1, k』2, k』3, …, k』i ) 的合適位置,得到乙個長度為 i+1 且仍然保持按值有序的子串行 ( k』『1, k』『2, k』『3, …, k』『i, k』'i+1 )。

/**

插入排序法從小到大排序

*/void

insertsort

(keytype k,

int n)

}

折半插入排序法事實上是將折半查詢法插入排序法結合在一起。故這裡我們先介紹折半查詢法。

折半查詢法

折半查詢法也可稱為二分查詢法,是在排序連續順序檔案中將要查詢的關鍵字值與當前查詢範圍內位置居中的記錄的關鍵字的值進行比較。

若匹配,則查詢成功,給出被查到的記錄在檔案中的位置,查詢結束。

若要查詢的關鍵字值小於位置居中的記錄的關鍵字值,則到當前查詢範圍的前半部分重複上述查詢過程,否則,到當前查詢範圍的後半部分重複上述查詢過程,直到查詢成功或失敗。若查詢失敗,則給出資訊0。

注:折半查詢法只能用於排序連續順序檔案! 變數

變數含義

n排序連續順序檔案中記錄的個數

low當前查詢範圍內第乙個記錄在文中的位置 ,初值 low=1

high

當前查詢範圍內最後那個記錄在檔案中的位置, 初值 high=n

mid當前查詢範圍內位置居中的那個記錄在檔案中的位置

折半查詢法非遞迴演算法

int

bin_search

(keytype key,

int n, keytype k)

return0;

// 查詢失敗

}

折半查詢法遞迴演算法
int

recur_bin_search

(keytype key,

int low,

int high, keytype k)

}

折半插入排序法
void

bin_insertsort

(keytype k,

int n)

// 採用折半查詢方法確定k[i]的合適位置

for(j=i-

1; j>=low; j--

) k[j+1]

= k[j]

;// 有關元素依次後移乙個位置

k[low]

= temp;

// 插入k[i],至此一趟結束

}}

C 排序系列(一) 插入排序之折半插入排序

鄭重宣告 本文是筆者根據個人理解所寫,錯誤難免,歡迎拍磚!折半插入排序 binary insertion sort 是對插入排序演算法的一種改進,由於排序演算法過程中,就是不斷的依次將元素插入前面已排好序的序列中。由於前半部分為已排好序的數列,這樣我們不用按順序依次尋找插入點,可以採用折半查詢的方法...

排序演算法(一) 插入排序

首先,對排序演算法 輸入 n 個數 輸出 序列的乙個排序,使得a1 a2 an 待排序的數為key 插入排序演算法,是乙個對少量元素進行排序的有效演算法.其偽 如圖 插入排序演算法在形式上類似於我們平時打牌時,邊抽牌邊整理撲克牌的順序,我們將新的牌與手中已經整理好順序的撲克牌進行比較,最終將抽到的牌...

排序演算法(一) 插入排序

一 插入排序 直接插入 二分插入 希爾排序 基本思想 從前面已經排序好的資料中查詢合適的位置,將待排序資料插入到該位置 從後面向前找合適的位置 1 直接插入排序 基本思想 從右向左查詢 從左邊已排序好的資料中查詢合適的位置,插入待排序的資料。private static void derictins...