1. 程式人生 > >資料結構 有序陣列java篇

資料結構 有序陣列java篇

一:有序陣列特點:
1:有序陣列特點:查詢快,插入,刪除慢,適合查詢多,修改少的環境
2:查詢時間複雜度O(log(n)),插入,刪除時間複雜度O(n)
3 : 插入平均需要比較n/2 次,移動n/2個元素
4 : 刪除是先查詢,然後移動n/2個元素

二:二分查詢思想
假設有n個元素的有序陣列,取陣列中間位置的值與檢索值比較,如果小於中間值,則利用二分查詢在前半部分的有序陣列中查詢,如果大於中間值,則利用二分查詢在前半部分的有序陣列中查詢,如果相等,則返回索引位置,否則沒有找到. 二分查詢需要不斷的縮小查詢的範圍。

public class HalfSort {
    private
int[] aint; private int size; public HalfSort(int size) { aint = new int[size]; size = 0; } public void insert(int value) { int x; for(x = 0 ; x < size; x++) { if(aint[x] > value) { break; } } //移動資料
for(int y = size; y > x; y--) { aint[y] = aint[y-1]; } aint[x] = value; size ++; } public boolean delete(int key) { int keyIndex = find(key); if(keyIndex == -1) { return false; } else { for(int x = keyIndex; x < size; x++ ) { aint[x] = aint[x+1
]; } size --; return true; } } //時間複雜度O(log(N)) public int find(int key) { int low = 0; int up = size - 1; int middle = 0; while(true) { middle = (up + low)/2; if(aint[middle] == key) { return middle; } else if(low > up) { return -1; } else { if(aint[middle] > key) { up = middle - 1; } else { low = middle + 1; } } } } public void display() { for(int x = 0; x < size ; x++) { System.out.print(aint[x] + " "); } System.out.println(""); } public static void main(String[] args) { HalfSort sort = new HalfSort(10); sort.insert(10); sort.insert(3); sort.insert(20); sort.insert(17); sort.insert(13); sort.insert(31); sort.insert(25); sort.display(); int ind = sort.find(10); sort.delete(20); sort.display(); } }