泛型化的折半查詢
折半查詢要求資料集合中的元素必須可比較,並且各元素按升序或者降序排列。折半查詢的基本思想如下:
取集合的中間元素作為比較物件,則:
(a)如果給定的值與比較物件相等,則查詢成功,返回中間元素的序號;
(b)如果給定的值大於比較物件,則在中間元素的左半段進行查詢;
(c)如果給定的值小於比較物件,則在中間元素的右半段進行查詢;
重複上述過程,直至查詢成功。折半演算法的平均時間複雜度是。
設計過程:
編寫BinSearch類,它有兩個方法:search()方法用來在給定的陣列array中,查詢key的索引位置;
main()方法用來進行測試。程式碼如下:
public class BinSearch {
public static <T extends Comparable<? super T>> int search(T[] array, T key) {
int low = 0;
int mid = 0;
int high = array.length;
System.out.println("查詢的中間值:");
while (low <= high) {
mid = (low + high) / 2;
System.out.print(mid+" ");
if (key.compareTo(array[mid]) > 0) {
low = mid + 1;
} else if (key.compareTo(array[mid]) < 0) {
high = mid - 1;
} else {
System.out.println();
return mid;
}
}
return -1;
}
public static void main(String[] args) {
Integer[] ints = {1,2,3,4,5,6,7,8,9,10};
System.out.println("資料集合:");
System.out.println(Arrays.toString(ints));
System.out.println("元素3所對於的索引序號:"+search(ints, 3));
}
}
效果如下:
程式設計心法:
泛型在資料結構中的應用。
在學習資料結構的過程中,為了理解方便和簡化程式設計,通常都使用整數作為分析的物件。利用Java的泛型機制,只需要將int替換成泛型型別T就可以實現更加通用的演算法。
這樣就不需要再對不同的資料型別編寫不同的演算法實現。
相關文章
- 查詢之折半查詢
- 查詢與排序02,折半查詢排序
- C語言折半查詢C語言
- java實現折半查詢。Java
- 正確的折半查詢實現
- 折半查詢法的平均查詢長度(成功/失敗)
- 折半查詢(C++實現)C++
- #查詢演算法#【1】簡單查詢:順序、折半查詢演算法
- 【資料結構】折半查詢(二分查詢)資料結構
- 二分搜尋(折半查詢)
- 折半查詢排序樹畫圖和排序
- 演算法-->折半查詢(快排)演算法
- 二分查詢【折半查詢】演算法 PHP 版演算法PHP
- 資料結構 折半查詢 swift的版本資料結構Swift
- hibernate 通用分頁,查詢分頁的泛型類泛型
- 優化星型查詢優化
- BST查詢結構與折半查詢方法的實現與實驗比較
- 轉:C++實現的變種二分查詢法(折半查詢)--二叉查詢樹C++
- 最佳化星型查詢
- (三)陣列的定義、折半查詢、排序(選擇和冒泡)陣列排序
- 資料結構之查詢(順序、折半、分塊查詢,B樹、B+樹)資料結構
- 查詢|有序表折半查詢判定樹|二叉排序樹|3階B-樹排序
- 【演算法資料結構Java實現】折半查詢演算法資料結構Java
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- 泛型類序列化泛型
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- 泛型類、泛型方法及泛型應用泛型
- 在靜態類中定義一個泛型方法查詢陣列元素泛型陣列
- 泛型類和泛型方法泛型
- 【java】【泛型】泛型geneticJava泛型
- java泛型之泛型方法。Java泛型
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- MySQL 的查詢優化MySql優化
- pgsql查詢優化之模糊查詢SQL優化
- Scala的泛型泛型
- TypeScript 泛型介面和泛型類TypeScript泛型
- Go 泛型之泛型約束Go泛型
- java泛型之泛型陣列。Java泛型陣列