課程:《程序設計與數據結構(下)》
班級:1723
姓名: 王志偉
學號:20172309
實驗教師:王志強老師
實驗日期:2018年11月2日
必修/選修: 必修html
public static <T> boolean linearSearch(T[] data, int min, int max, T target) { int index = min; boolean found = false; while (!found && index <= max) { found = data[index].equals(target); index++; } return found; }//順序/線性查找這個算法的理念是一個一個查找,直到找到爲止。不過我的以爲這個算法的缺點是當有兩個目標值時,將不會查到第二個。好比:在數組{1,2,3,4, 5, 5,6 }中查找數字5時,將只能查找到索引爲4的數字5,而不會查找到索引值爲5的那個。
public static <T extends Comparable<T>>//選擇排序 String selectionSort(T[] data) { int min; T temp; for (int index = 0; index < data.length - 1; index++) { min = index; for (int scan = index + 1; scan < data.length; scan++) if (data[scan].compareTo(data[min]) < 0) min = scan; swap(data, min, index); } return Arrays.toString(data); }選擇排序的理念就是把一排數列中的東西中的最大(最小)放到最前面並與之交換位置,以後又從剩下的算法中選擇出最大(最小)的與第二個項目交換位置·····直至所有完成。這裏值得說的一個重點是
Arrays.toString(data);
這個方法,這個方法的用處是把一個數組自動ToString(),也就是不用本身寫toString方法。
這裏要求測試用例須要正常、異常、邊界、正序、逆序我感受有點錯誤,好比線性查找哪來的正序、逆序測試,選擇排序哪來的邊界測試。不是很懂,感受有問題~~~java
把Sorting.java,Searching.java放入cn.edu.besti.cs1723.(姓名首字母+四位學號)包中(例如:cn.edu.besti.cs1723.G2301)。並把測試代碼放test包中。
android
一開始並不知道
cn.edu.besti.cs1723.
什麼意思,其實到文件中去看就會發現他這並非一個文件夾,而是cn的文件夾下有edu,edu的文件夾下有besti....git
開心的是好像IDEA也有命令行模式,不過這是在我作完實驗以後才發現的o(╥﹏╥)o
若是沒有顯示的話,能夠手動開啓:
算法
方法代碼:
```
public static <T extends Comparable
boolean binarySearch(T[] data, int min, int max, T target)
{
boolean found = false;
int midpoint = (min + max) / 2; // determine the midpoint
if (data[midpoint].compareTo(target) == 0)
found = true;數據庫
else if (data[midpoint].compareTo(target) > 0)
{
if (min <= midpoint - 1)
found = binarySearch(data, min, midpoint - 1, target);
}數組
else if (midpoint + 1 <= max)
found = binarySearch(data, midpoint + 1, max, target);數據結構
return found;app
}//二分查找
```
if (data[midpoint].compareTo(target) == 0)
found = true;
else if (data[midpoint].compareTo(target) > 0)
{
if (min <= midpoint - 1)
found = binarySearch(data, min, midpoint - 1, target);
}
else if (midpoint + 1 <= max)
found = binarySearch(data, midpoint + 1, max, target);
return found;
}//二分查找
```
mid=low+(key-a[low])/(a[high]-a[low])*(high-low)
爲何是這樣?在下面的的問題中講。public static boolean interpolationSearch(int[] data,int low,int high,int target){ while (low<high) { int mid=low+(high-low)*((target-data[low])/(data[high]-data[low])); if (target<data[mid]) { interpolationSearch(data, low, mid-1, target); } else if (target>data[mid]) { interpolationSearch(data, mid+1, high, target); } else { return data[mid]==target; } } return false; }//插值查找,不能使用泛型
public static boolean FibonacciSearch(int[] data,int target){ int low = 0; int high = data.length - 1; int mid = 0; // 斐波那契分割數值下標 int k = 0; // 序列元素個數 int count = 0; // 獲取斐波那契數列 int[] f = new int[20]; int m = 0; f[0] = 1; f[1] = 1; for (m = 2; m < 20; m++) { f[m] = f[m - 1] + f[m - 2]; } // 獲取斐波那契分割數值下標 while (data.length > f[k] - 1) { k++; } // 建立臨時數組 int[] temp = new int[f[k] - 1]; for (int j = 0; j < data.length;j++){ temp[j] = data[j]; }
詳情看上面連接
//詳情看上面連接
//詳情看上面連接
onclick
屬性。像這樣:<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="建立數據庫" **android:onClick="creatDb"**<--這兒 android:background="#ffbbff" />
public void onclick(View view){ switch (條件){ case R.id.button1: ···邏輯代碼··· break; case R.id.button2: ···邏輯代碼··· break; ····· }
@Test public void shellSort() { }
assertEquals(參數一,參數二)
方法,例:@Test public void shellSort() { assertEquals(預約結果,測試的方法); //例:assertEquals("[2301, 2302, 2303, 2305, 2307, 2309]",Sorting.shellSort(list1,3));//正常 }
mid=low+(key-a[low])/(a[high]-a[low])*(high-low)
是怎麼來的?補博客可真是麻煩,拿起了很久都沒動過的IDEA(由於最近在作實戰項目)。