20202324 实验七 《数据结构与面向对象程序设计》实验报告
# 20202306 2021-2022-1 《数据结构与面向对象程序设计》实验七报告
课程:《程序设计与数据结构》
班级: 2023
姓名: 肖郅宇
学号:20202324
实验教师:王志强
实验日期:2021年11月12日
必修/选修: 必修
## 1.实验内容
-
定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位
提交运行结果图。 -
重构你的代码
把Sorting.java Searching.java放入 cn.edu.besti.cs2023.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)
把测试代码放test包中
重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种) -
参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试
提交运行结果截图 -
实现排序方法等(至少3个)
测试实现的算法(正常,异常,边界)
提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵,也可以酌情得满分) -
编写Android程序对实现各种查找与排序算法进行测试
提交运行结果截
推送代码到码云(选做,额外加分)
- 定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
实验结果截图
以下为Searching和Sorting类代码
1 import java.util.Arrays; 2 3 public class Sorting { 4 public static <T> 5 String positive(int[] a, int size){ 6 int i, j, tempp = 0; 7 for(i = 0; i < size; i++){ 8 int temp = a[i]; 9 for(j = i + 1; j < size; j++){ 10 if(a[j] < temp){ 11 temp = a[j]; 12 tempp = j; 13 } 14 } 15 for(j = tempp; j > i; j--){ 16 a[j] = a[j - 1]; 17 } 18 a[i] = temp; 19 } 20 return Arrays.toString(a); 21 } 22 23 public static <T> 24 String inverse(int[] a, int size){ 25 int i, j, tempp = 0; 26 for(i = 0; i < size; i++){ 27 int temp = a[i]; 28 tempp = i; 29 for(j = i + 1; j < size; j++){ 30 if(a[j] > temp){ 31 temp = a[j]; 32 tempp = j; 33 } 34 } 35 for(j = tempp; j > i; j--){ 36 a[j] = a[j - 1]; 37 } 38 a[i] = temp; 39 } 40 return Arrays.toString(a); 41 } 42 }
1 public class Searching { 2 public static <T> 3 4 boolean linearSearch(T[] date,T target){ 5 int index; 6 date[0] = target; 7 8 for(index = date.length-1; !date[index].equals(target); --index){ 9 10 } 11 return index == 0 ? false : true; 12 } 13 }
以下为测试代码
1 import junit.framework.TestCase; 2 import org.junit.jupiter.api.Test; 3 4 import static org.junit.jupiter.api.Assertions.assertEquals; 5 6 public class SortingTest extends TestCase { //t1—t5为正序检测,t6-t10为逆序检测 7 String t1 = "[1, 2, 5, 6, 2324]", t2 = "[1, 23, 2324]", t3 = "[2, 6, 2324]", 8 t4 = "[1, 52, 2324, 9999]", t5 = "[2, 3, 6, 2324]", t6 = "[2324, 25, 16, 8]", 9 t7 = "[2324, 9, 8]", t8 = "[2324, 10, 5, 4]", t9 = "[9999, 2324, 22, 6]", t10 = "[2324, 55, 9, 8]"; 10 11 @Test 12 public void test1(){ 13 int[] t = {2324,1,5,6,2}; 14 assertEquals(t1, Sorting.positive(t, t.length)); 15 } 16 17 @Test 18 public void test2(){ 19 int[] t = {1,2324,23}; 20 assertEquals(t2, Sorting.positive(t, t.length)); 21 } 22 23 @Test 24 public void test3(){ 25 int[] t = {2,6,2324}; 26 assertEquals(t3, Sorting.positive(t, t.length)); 27 } 28 29 @Test 30 public void test4(){ 31 int[] t = {52,1,9999,2324}; 32 assertEquals(t4, Sorting.positive(t, t.length)); 33 } 34 35 @Test 36 public void test5(){ 37 int[] t = {2,2324,6,3}; 38 assertEquals(t5, Sorting.positive(t, t.length)); 39 } 40 41 @Test 42 public void test6(){ 43 int[] t = {25,16,2324,8}; 44 assertEquals(t6, Sorting.inverse(t, t.length)); 45 } 46 47 @Test 48 public void test7(){ 49 int[] t = {9,2324,8}; 50 assertEquals(t7, Sorting.inverse(t, t.length)); 51 } 52 53 @Test 54 public void test8(){ 55 int[] t = {2324,10,5,4}; 56 assertEquals(t8, Sorting.inverse(t, t.length)); 57 } 58 59 @Test 60 public void test9(){ 61 int[] t = {22,2324,9999,6}; 62 assertEquals(t9, Sorting.inverse(t, t.length)); 63 } 64 65 @Test 66 public void test10(){ 67 int[] t = {2324,55,9,8}; 68 assertEquals(t10, Sorting.inverse(t, t.length)); 69 } 70 }
1 import junit.framework.TestCase; 2 import org.testng.annotations.Test; 3 4 import static org.junit.jupiter.api.Assertions.assertEquals; 5 6 public class SearchingTest extends TestCase { 7 @Test 8 public void test1(){ //由于设置了哨兵,所以边界index为1 9 String[] t1 = {" ", "1", "2", "2324", "3", "4"}; 10 assertEquals(true, Searching.linearSearch(t1, "2")); //正常 11 assertEquals(false, Searching.linearSearch(t1, "0")); //异常 12 assertEquals(true, Searching.linearSearch(t1, "1")); //边界 13 } 14 15 @Test 16 public void test2(){ 17 String[] t1 = {"", "nice", "16", "2324", "20", "19"}; 18 assertEquals(true, Searching.linearSearch(t1, "2324")); //正常 19 assertEquals(false, Searching.linearSearch(t1, "111")); //异常 20 assertEquals(true, Searching.linearSearch(t1, "nice")); //边界 21 } 22 23 @Test 24 public void test3(){ 25 String[] t1 = {"", "2324", "2323", "2020", "456", "654"}; 26 assertEquals(true, Searching.linearSearch(t1, "2020")); //正常 27 assertEquals(false, Searching.linearSearch(t1, "222")); //异常 28 assertEquals(true, Searching.linearSearch(t1, "2324")); //边界 29 } 30 31 @Test 32 public void test4(){ 33 String[] t1 = {"", "11", "22", "33", "44", "2324"}; 34 assertEquals(true, Searching.linearSearch(t1, "2324")); //正常 35 assertEquals(false, Searching.linearSearch(t1, "333")); //异常 36 assertEquals(true, Searching.linearSearch(t1, "11")); //边界 37 } 38 39 @Test 40 public void test5(){ 41 String[] t1 = {"", "9", "8", "7", "2324", "6"}; 42 assertEquals(true, Searching.linearSearch(t1, "7")); //正常 43 assertEquals(false, Searching.linearSearch(t1, "444")); //异常 44 assertEquals(true, Searching.linearSearch(t1, "9")); //边界 45 } 46 @Test 47 public void test6(){ 48 String[] t1 = {"", "44", "789", "26", "2324", "321"}; 49 assertEquals(true, Searching.linearSearch(t1, "26")); //正常 50 assertEquals(false, Searching.linearSearch(t1, "555")); //异常 51 assertEquals(true, Searching.linearSearch(t1, "44")); //边界 52 } 53 @Test 54 public void test7(){ 55 String[] t1 = {"", "23", "66", "2324", "22", "9"}; 56 assertEquals(true, Searching.linearSearch(t1, "66")); //正常 57 assertEquals(false, Searching.linearSearch(t1, "666")); //异常 58 assertEquals(true, Searching.linearSearch(t1, "23")); //边界 59 } 60 @Test 61 public void test8(){ 62 String[] t1 = {"", "2323", "16", "2324", "20", "19"}; 63 assertEquals(true, Searching.linearSearch(t1, "2324")); //正常 64 assertEquals(false, Searching.linearSearch(t1, "777")); //异常 65 assertEquals(true, Searching.linearSearch(t1, "2323")); //边界 66 } 67 @Test 68 public void test9(){ 69 String[] t1 = {"", "566", "665", "1", "2", "2324"}; 70 assertEquals(true, Searching.linearSearch(t1, "2")); //正常 71 assertEquals(false, Searching.linearSearch(t1, "888")); //异常 72 assertEquals(true, Searching.linearSearch(t1, "566")); //边界 73 } 74 75 @Test 76 public void test10(){ 77 String[] t1 = {"", "33", "3", "abc", "0", "2324"}; 78 assertEquals(true, Searching.linearSearch(t1, "2324")); //正常 79 assertEquals(false, Searching.linearSearch(t1, "999")); //异常 80 assertEquals(true, Searching.linearSearch(t1, "33")); //边界 81 } 82 }
- 重构你的代码
实验结果截图
以下为重构后的类代码
1 import java.util.Arrays; 2 3 public class Sorting2 { 4 public static <T> 5 String positive(int[] a, int size){ 6 int i, j, tempp = 0; 7 for(i = 0; i < size; i++){ 8 int temp = a[i]; 9 for(j = i + 1; j < size; j++){ 10 if(a[j] < temp){ 11 temp = a[j]; 12 tempp = j; 13 } 14 } 15 for(j = tempp; j > i; j--){ 16 a[j] = a[j - 1]; 17 } 18 a[i] = temp; 19 } 20 return Arrays.toString(a); 21 } 22 23 public static <T> 24 String inverse(int[] a, int size){ 25 int i, j, tempp = 0; 26 for(i = 0; i < size; i++){ 27 int temp = a[i]; 28 tempp = i; 29 for(j = i + 1; j < size; j++){ 30 if(a[j] > temp){ 31 temp = a[j]; 32 tempp = j; 33 } 34 } 35 for(j = tempp; j > i; j--){ 36 a[j] = a[j - 1]; 37 } 38 a[i] = temp; 39 } 40 return Arrays.toString(a); 41 } 42 } 43 44 45 /* 46 import java.util.Arrays; 47 48 public class Sorting2 { 49 public static <T> 50 String positive(int[] a, int size){ 51 int i, j, tempp = 0; 52 for(i = 0; i < size; i++){ 53 int temp = a[i]; 54 for(j = i + 1; j < size; j++){ 55 if(a[j] < temp){ 56 temp = a[j]; 57 tempp = j; 58 } 59 } 60 for(j = tempp; j > i; j--){ 61 a[j] = a[j - 1]; 62 } 63 a[i] = temp; 64 } 65 return Arrays.toString(a); 66 } 67 68 public static <T> 69 String inverse(int[] a, int size){ 70 int i, j, tempp = 0; 71 for(i = 0; i < size; i++){ 72 int temp = a[i]; 73 tempp = i; 74 for(j = i + 1; j < size; j++){ 75 if(a[j] > temp){ 76 temp = a[j]; 77 tempp = j; 78 } 79 } 80 for(j = tempp; j > i; j--){ 81 a[j] = a[j - 1]; 82 } 83 a[i] = temp; 84 } 85 return Arrays.toString(a); 86 } 87 } */
1 public class Searching2 { 2 public static <T> 3 4 boolean linearSearch(T[] date,T target){ 5 int index; 6 date[0] = target; 7 8 for(index = date.length-1; !date[index].equals(target); --index){ 9 10 } 11 return index == 0 ? false : true; 12 } 13 } 14 15 /* 16 import java.io.Serializable; 17 18 public class Searching2 { 19 public static <T> Serializable linearSearch(T[] date, T target){ 20 int index; 21 date[0] = target; 22 23 for(index = date.length-1; !date[index].equals(target); --index){ 24 25 } 26 if(index != 0){ 27 return "index: " + index; 28 } 29 else { 30 return "not this number"; 31 } 32 } 33 } 34 */
以下为测试代码
import junit.framework.TestCase;
public class SortingTest2 extends TestCase { //t1—t5为正序检测,t6-t10为逆序检测
String t1 = "[1, 2, 5, 6, 2324]", t2 = "[1, 23, 2324]", t3 = "[2, 6, 2324]",
t4 = "[1, 52, 2324, 9999]", t5 = "[2, 3, 6, 2324]", t6 = "[2324, 25, 16, 8]",
t7 = "[2324, 9, 8]", t8 = "[2324, 10, 5, 4]", t9 = "[9999, 2324, 22, 6]", t10 = "[2324, 55, 9, 8]";
public void test1(){
int[] t = {2324,1,5,6,2};
assertEquals(t1, Sorting2.positive(t, t.length));
}
public void test2(){
int[] t = {1,2324,23};
assertEquals(t2, Sorting2.positive(t, t.length));
}
public void test3(){
int[] t = {2,6,2324};
assertEquals(t3, Sorting2.positive(t, t.length));
}
public void test4(){
int[] t = {52,1,9999,2324};
assertEquals(t4, Sorting2.positive(t, t.length));
}
public void test5(){
int[] t = {2,2324,6,3};
assertEquals(t5, Sorting2.positive(t, t.length));
}
public void test6(){
int[] t = {25,16,2324,8};
assertEquals(t6, Sorting2.inverse(t, t.length));
}
public void test7(){
int[] t = {9,2324,8};