二分查詢 快速排序 遞迴呼叫的分析

2021-08-29 01:15:33 字數 1730 閱讀 5535

常見的基礎演算法,相信大家見過很多。接下來我來分析下二分查詢、和快速排序演算法。

前提是在已經排好序的陣列中,通過查詢的元素與中間元素索引值對應的元素進行比較,若大於中間索引值的元素,則向陣列右半部分查詢元素。依次類推,直到找到為止;找不到就返回乙個負數;

二分查詢的時間複雜度為o(log n)

下面是二分查詢的**:

/**

* 二分查詢法(折半查詢):前提是在已經排好序的陣列中,通過待查詢的元素中與中間元素索引值對應的元素進行比較,若大於中間索引值對應的元素,去右半部分查詢;

* 否則去左半部分查詢。一次類推,直到找到為止;找不到就返回乙個負數;

* **/public class erfenchazhao ;//乙個陣列

erfenchazhao e = new erfenchazhao();

int index = e.binarysearch(num, 100);//將查詢到的元素索引值賦值給index

system.out.println(index);

}public int binarysearch(int num,int pointnumber)

else

} return -1; 找不到就返回-1

}}

快速排序的時間複雜度為:n(logn),但是最糟糕的情況和冒泡選擇一樣時間複雜度為(n*n)

快速排序運用了分治法,先比較大小再分割槽:

1.先從陣列中取出乙個數作為基準數。

2.分割槽:將比這個數大的或等於的數放在它的右邊,小於它的數全部放到它的左邊。

3.在對左右取件重複第二步,直到各區間只有乙個數;

實現思路:

挖坑填數:

1.把基準數挖出形成第乙個坑

2.由後向前查詢比它小的數,找到後挖出此數填到前乙個坑中。

3.由前向後找比它大或等於的數,找到後也挖出此數填到前乙個坑中。

4.重複執行第2步,第3步;

下面是**:

public class quickpaixu 

if(i遞迴是指在函式的定義中使用函式自身的方法。

在編碼遞迴函式的時候,必須告訴它何時停止遞迴。因此每個遞迴函式分為兩部分:基線條件和遞迴條件;

基線條件指的是函式不在呼叫自己,從而避免無限迴圈下去。

遞迴條件指能夠不停呼叫自己的方法。

下面是乙個fabonacci數列的問題例子,fabonacci數列的描述是這樣的,當n<=2時,f(1)=1,f(2)=1。  當n>=3時,f(n)=f(n-1)+f(n-2);

public class digui

else }

public static void main(string args)

}

上面是我的一些我對二分查詢、快速排序、遞迴呼叫演算法的簡單的理解,錯誤之處,還請糾正。

快速排序 二分查詢

1.舉例說明一下吧,這個可能不是太好理解。假設要排序的序列為 2 4 9 3 6 7 1 5 首先用2當作基準,使用i j兩個指標分別從兩邊進行掃瞄,把比2小的元素和比2大的元素分開。首先比較2和5,5比2大,j左移 2 4 9 3 6 7 1 5 比較2和1,1小於2,所以把1放在2的位置 1 4...

快速排序 二分查詢

基準數後面的數需要大於基準數,從後向前尋找a j tmp,尋找到a 8 的3 5,將a 8 放入空位a 0 中,a j a 8 此時空出位置 接著從前向後遍歷a i 5,找到a 1 符合條件,將a 1 放入空位a 8 a 1 空出 繼續從後向前尋找 繼續從後向前尋找 遍歷至i j 結束,此時i前邊元...

遞迴演算法 歸併排序,快速排序,二分查詢

待排序的陣列,演算法輸入 int arrintegers 10 輔助儲存空間 int tempintegers 10 從陣列中間劃分陣列為2個子陣列,遞迴呼叫歸併排序,然後合併 排序過程發生在合併時候 2個子陣列。輔助儲存空間為n。這裡使用的方式和 快速排序分析裡面有差別,這個是交換,那乙個是填坑 ...