泛型化的折半查詢
折半查詢要求資料集合中的元素必須可比較,並且各元素按升序或者降序排列。折半查詢的基本思想如下:
取集合的中間元素作為比較物件,則:
(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就可以實現更加通用的演算法。
這樣就不需要再對不同的資料型別編寫不同的演算法實現。
相關文章
- 折半查詢法的平均查詢長度(成功/失敗)
- 折半查詢(C++實現)C++
- 折半查詢排序樹畫圖和排序
- 二分搜尋(折半查詢)
- 二分查詢【折半查詢】演算法 PHP 版演算法PHP
- BST查詢結構與折半查詢方法的實現與實驗比較
- (三)陣列的定義、折半查詢、排序(選擇和冒泡)陣列排序
- 資料結構之查詢(順序、折半、分塊查詢,B樹、B+樹)資料結構
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- 泛型類、泛型方法及泛型應用泛型
- 【java】【泛型】泛型geneticJava泛型
- MySQL 的查詢優化MySql優化
- pgsql查詢優化之模糊查詢SQL優化
- 泛型類和泛型方法泛型
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- 二分查詢和折半插入排序一塊說說-很合適~~~排序
- 查詢優化優化
- MongoDB日期型別查詢MongoDB型別
- 查詢最佳化——查詢樹結構
- TypeScript 泛型介面和泛型類TypeScript泛型
- Go 泛型之泛型約束Go泛型
- 泛型泛型
- 10分鐘掌握資料型別、索引、查詢的MySQL優化技巧資料型別索引MySql優化
- HBase查詢優化優化
- Oracle in 查詢優化Oracle優化
- join 查詢優化優化
- MySQL查詢優化MySql優化
- 泛型最佳實踐:Go泛型設計者教你如何用泛型泛型Go
- Kotlin中的泛型Kotlin泛型
- 泛型物件的使用泛型物件
- Java中的泛型Java泛型
- 泛型擦除的原理泛型
- 關於樹結構的查詢優化,及許可權樹的查詢優化優化
- mysql查詢優化檢查 explainMySql優化AI
- Sql Server 的引數化查詢SQLServer
- MySQL——優化巢狀查詢和分頁查詢MySql優化巢狀
- SQL查詢的:子查詢和多表查詢SQL
- Django框架:8、聚合查詢、分組查詢、F與Q查詢、ORM查詢最佳化、ORM事務操作、ORM常用欄位型別、ORM常用欄位引數Django框架ORM型別
- TypeScript 泛型型別TypeScript泛型型別