演算法筆記之常用查詢與排序

2021-07-11 01:01:37 字數 2151 閱讀 4737

直接插入排序:一種最為簡單的排序方法。

基本思想:第 i 趟排序將序列中的第 i+1 個元素 k[i+1] 插入到乙個已經按值有序的子串行中(k[0]....k[i])中的合適的位置,使得插入後的序列仍然保按值有序。

詳細演算法:

//從小到大

void insertsort(keytype k, int n)

}

選擇排序:

基本思想:第 i 趟排序從序列的後 n-i+1(i=1,2,...,n-1) 個元素中選擇一下最小的元素,與該 n-i+1 個元素的最前面那個元素進行位置交換,也就是與第 i

個位置上的元素進行交換,直到 i=n-1。

直觀地講,第一趟的選擇排序就是從序列中未排好順序的元素中選擇乙個最小的元素,將該元素與這些未排好順序的元素的第乙個元素交換位置。

詳細演算法:

//從小到大

void selectsort(keytype k,int n)

if(min != i)

}}

氣泡排序:

基本思想:(1) 將序列中的第 1 個元素與第 2 個元素進行比較 ,若前者大於後者 ,則將第 1 個元素與第2 個元素進行位置交換,否則不交換。

(2) 再將第 2 個元素與第 3 個元素進行比較,同樣若前者大於後者,則者第 2 個元素與第 3 個元素進行位置交換,否則不交換

(3) 依此類推,直到將第 n-1 個元素與第 n 個元素進行比較為止。

簡易來說: 就是每次比較兩個相鄰的元素,如果它們的順序錯誤就把它們交換過來。

改進方法:設定乙個標誌變數 flag, 1 表示本趟排序中仍有元素交換動作;0 表示本趟排序中已經沒有了元素交換,排序結束。

詳細演算法:

void buddysort(int k, int n)}}

}

時間複雜度: o(n^2);

快速排序:氣泡排序的一種改進演算法,比較次數較少,速度較快, 最常用的排序。

基本思想: 在當前的排序序列(k1,k2,...kn)中任意選取 乙個元素,把該元素稱為基準元素或支點 ,把小於等於基準元素的所有元素都移到基準元素的前面 ,把大於基準元素的所有 元素都移到基準元素的後面,這樣使得基準元素氣息的位置恰好就是排序的最終位置,並且把當前參加排序的序列劃分為前後兩個子串行,其中前面 的子串行中的元素都小於等於基準元素,後面的子串行的元素都大於基準元素,接下來分別對這兩人個子序列重複上述的排序操作(如果 子串行的長度大於1),直到使得所有 元素都 被移動到排序後它們應處的最終位置上.

詳細演算法:

//從小到大

int data[100];

quicksort(0, 99);

void quicksort(int left, int right)

}//將基準數歸位

data[left] = data[i];

data[i] = t;

quicksort(left, i - 1);//進行遞迴,處理左邊

quicksort(i + 1, right);//進行遞迴,處理右邊

}

順序查詢:

基本思想:(1) 從檔案的第乙個記錄開始,將每個記錄的關鍵字與給定的關鍵字key 進行比較。

(2) 如果匹配,則查詢成功,返回該記錄的位址 ,如果所有的關鍵字都 與key進行了比較 ,都沒有匹配,是本次查詢失敗,返回失敗標誌-1.

優點:在於簡單直觀,對於被查詢的記錄在檔案中的排列順序沒有限制,因此比較適合順序檔案的查詢。同時這種查詢思想也適合於對順序表資料結構和鍊錶資料中的元素進行查詢。

缺點:在於平均長度過大,查詢效率較低。

折半查詢

: 如果 從檔案中讀取的資料記錄的關鍵字是 有序排列的, 剛可以使用這種效率更高的 折半查詢法(二分搜尋)

基本思想:減小查詢序列的長度,分而冶之地進行關鍵字的查詢。

查詢過程:先確定待查詢記錄的範圍,然後逐漸縮小查詢範圍,直至找到該記錄為止(也有可能查詢失敗)。

詳細演算法:

int binsearch(keytype key, int n, keytype k)

return -1; //查詢失敗

}

常用的 查詢演算法與排序演算法

順序查詢 從列表第乙個元素開始,順序進行搜尋,直到找到為止。二分查詢 從有序列表的候選區data 0 n 開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。li 1,2,3,4,5,6,7,8,9 val 5 defsearch li,val low 0 high len li 1 ...

演算法 常用排序和查詢

常見演算法中的排序和查詢 1.選擇排序 指定乙個和其他數比較 選擇排序 指定乙個和其他數比較 for int i 0 i 2.氣泡排序 相鄰兩個數比較 氣泡排序 相鄰兩個數比較 for int i 0 i 3.插入排序 指定乙個數和他左邊的數依次往左比較,直到不滿足條件為止 插入排序 指定乙個數和他...

常用演算法之排序演算法 選擇排序

目錄 直接選擇排序 堆排序 思想 每趟從待排序的記錄序列中選擇關鍵字最小的記錄放置到已排序表的最前位置,直到全部排完。關鍵問題 在剩餘的待排序記錄序列中找到最小關鍵碼記錄。簡單的選擇排序 1 基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置...