入門演算法 二分查詢,二分排序,插入排序,氣泡排序

2022-09-08 00:36:14 字數 1200 閱讀 9962

二分查詢,需要將業務模擬乙個有序陣列。然後查詢某個值在該陣列中的位置。

二分查詢的關鍵是:

1)查詢的值一定在某次的範圍中間。即使值是最後乙個,也要按照二分法的規則去查詢。

2)有左右邊界的查詢範圍作為乙個迴圈不變式

function bsearch(a, x)  

else

if (a[guess] >x)

else

}return -1; //

沒找到}

//

主迴圈執行n-1次(n代表輸入的資料長度)

function insertion_sort(a)

}function

bsearch(a, i, x)

else

if (a[guess] >x)

else

}for (let j = i; j > r; j--)

a[r+1] =x;

}

時間複雜度: 最壞: θ(n**2); 平均o(n**2)

子問題: 在乙個有序陣列中插入乙個新值,即插入第乙個比待插數要大的值前面。

第一反應是用js實現

function jsinsert(a, x)

考慮實現同樣的問題,使用插入排序演算法(從最大值開始比較)

function insert(a, x) 

a[p+1] =x;

}

插入排序:對無序陣列進行排序。

分為兩步: 1)預設第乙個值是已排序狀態。

2)將待排的下乙個值插入已經排序的位置。迴圈不變式。

function insert(a, i, x) 

a[p+1] =x;

}function insertion_sort(a)

}

複雜度和插入排序相同

每次冒泡通過遍歷兩兩比較(交換或者不交換n-1),排出乙個最大值;第二次遍歷n-1的陣列;.....,一共遍歷n-1次。

由描述可知,分為記憶體迴圈和外層迴圈

function

bubble_sort(a) }}

}function

swap(a,i,j)

排序演算法 二分排序(插入排序 二分查詢)

插入排序就是一直向後讀,第乙個數,加入前面已經有序的一串數里。而插入排序是笨笨的乙個個向前找的,可以優化一下,用二分查詢找到合適的位置。插入排序 void insertsort2 int a,int n 所以只需要理解一下二分查詢就可以了 比如乙個串數,已經有序 分成對等 盡量 兩塊 注意3個數 第...

演算法 二分排序

二分排序這個詞是我在面試中遇到的,當時第一反應是二分查詢,然後被打斷,是二分排序演算法,最終才了解到,二分排序就是我們熟知的歸併排序。它又稱二路排序。首先說一下歸併的思想 先將一組數列,數列中含有n個元素,假設將每乙個元素看成是乙個有序的數列,就是n個有序的子串行,每個子串行的長度為1,然後倆倆合併...

二分排序演算法

bool check int x 檢查x是否滿足某種性質 區間 l,r 被劃分成 l,mid 和 mid 1,r 時使用 intbsearch 1 int l,int r return l 區間 l,r 被劃分成 l,mid 1 和 mid,r 時使用 intbsearch 2 int l,int ...