常見的基礎演算法,相信大家見過很多。接下來我來分析下二分查詢、和快速排序演算法。
前提是在已經排好序的陣列中,通過查詢的元素與中間元素索引值對應的元素進行比較,若大於中間索引值的元素,則向陣列右半部分查詢元素。依次類推,直到找到為止;找不到就返回乙個負數;
二分查詢的時間複雜度為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。這裡使用的方式和 快速排序分析裡面有差別,這個是交換,那乙個是填坑 ...