Searching、BSTNode、Sorting、LinkedBinarySearchTree、Searchingtest、SortTestphp
Searching
和Sorting
.的方法,要求各類狀況測試,排序須要正序和逆序Searching
在數組依次中添加三、八、十二、3四、5四、8四、9一、1十、一、0十個元素Comparable[] comparables = {1,0,3, 8, 12, 34, 54, 84, 91, 81,110};
Comparable result1 = Searching.binarySearch(comparables, 45); System.out.println(result1); Comparable result2 = Searching.binarySearch(comparables, 54); System.out.println(result2 );
Sorting
方法,一樣建立數字3, 12, 8, 34, 54, 84, 110, 91順序不一樣的數組Comparable[] lxr = {3, 12, 8, 34, 54, 84, 110, 91};
if (data[scan].compareTo(data[scan + 1]) < 0)
,即經過比較將小的值放到右邊,獲得逆序。測試截圖以下。Sorting.quickSort(lxr, 0, lxr.length - 1); for (Comparable lxrs : lxr) { System.out.print(lxrs + " "); }
Sorting
和Searching
放入 cn.edu.besti.cs1623.劉先潤2320包中,從新編譯並運行。Searching
的查找算法,並進行測試三、八、十二、3四、5四、8四、9一、1十、一、0
十個元素的。備註:樹表查找是在二叉查找樹中已經實現,不在贅述,能夠參見個人代碼LinkedBinarySearchTree和LinkedBinarySearchTreeTestpublic static int interpolationSearch(int[] a, int key) { int low, mid, high; low = 0;// 最小下標 high = a.length - 1;// 最大小標 while (low < high) { mid = low + (high - low) * (key - a[low]) / (a[high] - a[low]); // mid = (high + low) / 2;// 折半下標 if (key > a[mid]) { low = mid + 1; // 關鍵字比 折半值 大,則最小下標 調成 折半下標的下一位 } else if (key < a[mid]) { high = mid - 1;// 關鍵字比 折半值 小,則最大下標 調成 折半下標的前一位 } else { return mid; // 當 key == a[mid] 返回 折半下標 } } return -1; }
public static int fibonaciSearch(int[] b, int key) { int[] f = {-1,0,3, 8, 12, 34, 54, 84, 91, 110}; int low1, mid1, high1, k; low1 = 0; high1 = b.length - 1; k = 0; while (high1 > f[k] - 1) k++; b = Arrays.copyOf(b, f[k]); for (int i = high1 + 1; i < f[k]; i++) { b[i] = b[high1]; } while (low1 <=high1) { mid1 = low1 + f[k - 1] - 1; if (key < b[mid1]) { high1 = mid1 - 1; k = k - 1; } else if (key > b[mid1]) { low1 = mid1 + 1; k = k - 2; } else { if (mid1 <= high1) return mid1; else return high1; } } return -1; }
public static class BlockSearch { private int[] index; //創建索引 private ArrayList[] list; public BlockSearch(int[] index) { if (index != null && index.length != 0) { this.index = index; this.list = new ArrayList[index.length]; for (int i = 0; i < list.length; i++) { list[i] = new ArrayList();//初始化容器 } } else { throw new Error("index cannot be null or empty"); } } public void insert(int value) { int i = binarysearch(value); list[i].add(value); } private int binarysearch(int value) { int start = 0; int end = index.length; int mid = -1; while (start <= end) { mid = (start + end) / 2; if (index[mid] > value) { end = mid - 1; } else { start = mid + 1; } } return start; } public String search(int data) { int i = binarysearch(data); String q1="查無此數"; String q2="成功找到"; for (int j = 0; j < list[i].size(); j++) { if (data == (int) list[i].get(j)) { System.out.println(String.format("查找元素爲第: %d塊 第%d個 元素", i + 1, j + 1)); return q2; } } return q1; } public void printAll() { for (int i = 0; i < list.length; i++) { ArrayList l = list[i]; System.out.print("塊" + i + ":"); for (int j = 0; j < l.size(); j++) { System.out.print(l.get(j) + " "); } } } }
public static int searchHash(int[] hash, int hashLength, int key) { int hashAddress = key % hashLength; while (hash[hashAddress] != 0 && hash[hashAddress] != key) { hashAddress = (++hashAddress) % hashLength; } if (hash[hashAddress] == 0) return -1; return hashAddress;} public static void insertHash(int[] hash, int hashLength, int data) { int hashAddress = data % hashLength; while (hash[hashAddress] != 0) { hashAddress = (++hashAddress) % hashLength; } hash[hashAddress] = data; }
public int[] heapSort(int[] array){ array = buildMaxHeap(array); for(int i=array.length-1;i>1;i--){ int temp = array[0]; array[0] = array[i]; array[i] = temp; adjustDownToUp(array, 0,i); } return array; }
public void add (T item) { if (item.compareTo(element) < 0) if (left == null) left = new BSTNode (item); else ((BSTNode)left).add (item); else if (right == null) right = new BSTNode (item); else ((BSTNode)right).add (item);
public static void bucketSort(int[] arr){ int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; for(int i = 0; i < arr.length; i++){ max = Math.max(max, arr[i]); min = Math.min(min, arr[i]); } //桶數 int bucketNum = (max - min) / arr.length + 1; ArrayList<ArrayList<Integer>> bucketArr = new ArrayList<>(bucketNum); for(int i = 0; i < bucketNum; i++){ bucketArr.add(new ArrayList<Integer>()); } for(int i = 0; i < arr.length; i++){ int num = (arr[i] - min) / (arr.length); bucketArr.get(num).add(arr[i]); } for(int i = 0; i < bucketArr.size(); i++){ Collections.sort(bucketArr.get(i)); } System.out.println(bucketArr.toString());
public static void shellSortSmallToBig(int[] data) { int j = 0; int temp = 0; for (int increment = data.length / 2; increment > 0; increment /= 2) { System.out.println(); for (int i = increment; i < data.length; i++) { // System.out.println("i:" + i); temp = data[i]; for (j = i - increment; j >= 0; j -= increment) { if (temp < data[j]) { data[j + increment] = data[j]; } else { break; } } data[j + increment] = temp; } for (int i = 0; i < data.length; i++) System.out.print(data[i] + " "); } }