1. 程式人生 > 實用技巧 >最近正在理解java的一些基礎演算法的東西

最近正在理解java的一些基礎演算法的東西

我會經常更新一些自己學習過程中寫的東西,建議多dbg觀察一下資料每次迴圈的變化,這樣才能加深理解。好好學習!


public class TestMath {
public static void main(String[] args) {
int arry[] = {12, 43, 12, 65, 12, 65, 12, 88, 3, 98, 1};
// System.out.println(binserch(arry,20));
maopao(arry);
}


/**
* 二分搜尋(折半查詢)
* 思想:將數列按有序化(遞增或遞減)排列,查詢過程中採用跳躍式方式查詢,即先以有序數列的中點位置為比較物件,
* 如果要找的元素值小 於該中點元素,則將待查序列縮小為左半部分,否則為右半部分。通過一次比較,將查詢區間縮小一半。
* 條件:陣列必須有序
* 優點:查詢效率高
* 缺點:元素必須有序且插入刪除困難
* 適用場景: 折半查詢方法適用於不經常變動而查詢頻繁的有序列表。
*/
public static int binserch(int[] arr, int key) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (right + left) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else if (arr[mid] > key) {
right = mid - 1;
}
}
return -1;
}


/**
* 氣泡排序
*
* @param arr
* @return
*/

public static int[] maopao(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
//這裡吧引數提出來方便dug觀察每次迴圈的引數變化
int arrj = arr[j];
int arrj1 = arr[j + 1];
//這裡為正序排序
if (arr[j] > arr[j + 1]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
int s = arr[j];
arr[j] = temp;
}
}
}
//打印出來
for (int as : arr) {
System.out.println(as);
}
return arr;
}


}