20192306 2020-2021-1 《数据结构与面向对象程序设计》实验七报告

20192306 2020-2021-1 《数据结构与面向对象程序设计》实验七报告

课程:《程序设计与数据结构》
班级: 1923
姓名: 孙洪丽
学号: 20192306
实验教师:王志强
实验日期:2020年11月19日
必修/选修: 必修

1.实验内容

  • 定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
  1. 要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位
  2. 提交运行结果图。
  • 重构你的代码
  1. 把Sorting.java Searching.java放入 cn.edu.besti.cs1923.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1923.G2301)
  2. 把测试代码放test包中
  3. 重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)
  • 参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试
  1. 提交运行结果截图
  • 补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
  1. 测试实现的算法(正常,异常,边界)
  2. 提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵,也可以酌情得满分)
  • 编写Android程序对实现各种查找与排序算法进行测试
  1. 提交运行结果截图
  2. 推送代码到码云(选做,加分)

2.实验过程及结果

定义Searching和Sorting类并分别测试

  • Searching类
  1. 类代码
public class Searching {
    private int List[];
    private int searchElement;
    private int listSize;
    private int locate;
    public Searching(int[] list, int searchElement) 
    {
        List = list;
        this.searchElement = searchElement;
        listSize= List.length;
    }
    public int linearSearch(){
        for (int i=listSize-1;;i--){
            if (searchElement==List[i]){
                locate=i;
                return List[i];
            }
            else if (i==0){
                return 0;
            }
        }
    }
}
  1. 测试代码
public class SearchTest {
    public static void main(String[] args) {
        int a1[]={1,2,3,4,5,6,7,8,9,2306};
        int a2[]={9,8,7,6,5,4,3,2,1,2306};
        int a3[]={23,8,445,6,5,45,3,2,98,2306};
        int a4[]={6,8,7,243,5,4,3,2,43,2306};
        int a5[]={24,8,7,6,5,4,3,2,76,2306};
        int a6[]={12,8,7,233,5,4,3,2,43,2306};
        int a7[]={3245,9,8,34,6,5,4,3,2,12,2306};
        int a8[]={43,8,7,6,5,23,3,2,24,2306};
        int a9[]={65,8,7,56,5,4,3,2,234,2306};
        int a10[]={46,8,7,32,5,4,3,2,2,2306};
        System.out.println("线性查找:");
        System.out.println(new Searching(a1,4).linearSearch());//正常
        System.out.println(new Searching(a1,1).linearSearch());//边界
        System.out.println(new Searching(a1,2306).linearSearch());//边界
        System.out.println(new Searching(a1,999).linearSearch());//异常,输出0
        System.out.println();
        System.out.println(new Searching(a2,4).linearSearch());//正常
        System.out.println(new Searching(a2,9).linearSearch());//边界
        System.out.println(new Searching(a2,2306).linearSearch());//边界
        System.out.println(new Searching(a2,999).linearSearch());//异常
        System.out.println();
        System.out.println(new Searching(a3,243).linearSearch());//正常
        System.out.println(new Searching(a3,6).linearSearch());//边界
        System.out.println(new Searching(a3,2306).linearSearch());//边界
        System.out.println(new Searching(a3,999).linearSearch());//异常
        System.out.println();
        System.out.println(new Searching(a4,4).linearSearch());//正常
        System.out.println(new Searching(a4,1).linearSearch());//边界
        System.out.println(new Searching(a4,2306).linearSearch());//边界
        System.out.println(new Searching(a4,999).linearSearch());//异常
        System.out.println();
        System.out.println(new Searching(a5,4).linearSearch());//正常
        System.out.println(new Searching(a5,24).linearSearch());//边界
        System.out.println(new Searching(a5,2306).linearSearch());//边界
        System.out.println(new Searching(a5,999).linearSearch());//异常
        System.out.println();
        System.out.println(new Searching(a6,4).linearSearch());//正常
        System.out.println(new Searching(a6,12).linearSearch());//边界
        System.out.println(new Searching(a6,2306).linearSearch());//边界
        System.out.println(new Searching(a6,999).linearSearch());//异常
        System.out.println();
        System.out.println(new Searching(a7,4).linearSearch());//正常
        System.out.println(new Searching(a7,3245).linearSearch());//边界
        System.out.println(new Searching(a7,2306).linearSearch());//边界
        System.out.println(new Searching(a7,999).linearSearch());//异常
        System.out.println();
        System.out.println(new Searching(a8,23).linearSearch());//正常
        System.out.println(new Searching(a8,43).linearSearch());//边界
        System.out.println(new Searching(a8,2306).linearSearch());//边界
        System.out.println(new Searching(a8,999).linearSearch());//异常
        System.out.println();
        System.out.println(new Searching(a9,4).linearSearch());//正常
        System.out.println(new Searching(a9,65).linearSearch());//边界
        System.out.println(new Searching(a9,2306).linearSearch());//边界
        System.out.println(new Searching(a9,999).linearSearch());//异常
        System.out.println();
        System.out.println(new Searching(a10,4).linearSearch());//正常
        System.out.println(new Searching(a10,46).linearSearch());//边界
        System.out.println(new Searching(a10,2306).linearSearch());//边界
        System.out.println(new Searching(a10,999).linearSearch());//异常
    }
}
  1. 结果截图


  • Sorting类
  1. 类代码
import java.util.Arrays;
public class Sorting {
    private int List[];
    private int size;
    public Sorting(int[] list) {
        List = list;
        size=List.length;
    }
    public String selectionSort(){
        int temp,tempx;
        for (int i=0;i<size-1;i++){
            temp=i;
            for (int j=i+1;j<size;j++){
                if (List[temp]>List[j]){
                    temp=j;
                }
            }
            if (temp == 0) {
                continue;
            }
            else {
                tempx=List[i];
                List[i]=List[temp];
                List[temp]=tempx;
            }
        }
        return Arrays.toString(List) ;//输出数组值,而不是地址值
    }
}
  1. 测试代码
public class SortTest {
    private static int a1[]={1,2,3,4,5,6,7,8,9,2306};//正序
    private static int a2[]={2306,9,8,7,6,5,4,3,2,1};//逆序
    private static int a3[]={23,8,445,6,5,45,3,2,98,2306};
    private static int a4[]={6,8,7,243,5,4,3,2,43,2306};
    private static int a5[]={24,8,7,6,5,4,3,2,76,2306};
    private static int a6[]={12,8,7,233,5,4,3,2,43,2306};
    private static int a7[]={3245,9,8,34,6,5,4,3,2,12,2306};
    private static int a8[]={43,8,7,6,5,23,3,2,24,2306};
    private static int a9[]={65,8,7,56,5,4,3,2,234,2306};
    private static int a10[]={46,8,7,32,5,4,3,2,2,2306};
    public static void main(String[] args) {
        System.out.println(new Sorting(a1).selectionSort());
        System.out.println(new Sorting(a2).selectionSort() );
        System.out.println(new Sorting(a3).selectionSort() );
        System.out.println(new Sorting(a4).selectionSort() );
        System.out.println(new Sorting(a5).selectionSort() );
        System.out.println(new Sorting(a6).selectionSort() );
        System.out.println(new Sorting(a7).selectionSort() );
        System.out.println(new Sorting(a8).selectionSort() );
        System.out.println(new Sorting(a9).selectionSort() );
        System.out.println(new Sorting(a10).selectionSort() );
    }
}
  1. 结果截图

    码云

将两个程序放入不同的文件夹运行

  • 采用单元测试的方式,编写测试代码
import second.cn.edu.besti.cs1923.S2306.Searching;
import second.cn.edu.besti.cs1923.S2306.Sorting;
import junit.framework.TestCase;
public class Test extends TestCase {
    Searching a = new Searching();
    Sorting b = new Sorting();
    @org.junit.Test
    public void testSearching()
    {
        int[] t1 = {19,14,23,1,68,20,84,27,55,11,10,2306};
        assertEquals(false,a.linearSearch(t1,9,12));            //正常
        assertEquals(true,a.linearSearch(t1,1,12));             //正常
        assertEquals("Abnormal",a.linearSearch(t1,1,18));       //异常
        assertEquals(true,a.linearSearch(t1,2306,12));            //边界
        int[] t2 = {5,2,7,43,21,65,2306};
        assertEquals(true,a.linearSearch(t2,2,7));
        assertEquals(false,a.linearSearch(t2,42314,7));
        assertEquals("Abnormal",a.linearSearch(t2,1,18));
        assertEquals(true,a.linearSearch(t2,5,7));
        int[] t3 = {1,24,5,5,2,2,45,2306};
        assertEquals(true,a.linearSearch(t3,24,8));
        assertEquals(false,a.linearSearch(t3,0,8));
        assertEquals("Abnormal",a.linearSearch(t3,1,18));
        assertEquals(true,a.linearSearch(t3,2306,8));
        int[] t4 = {2,423,42,435,32,45,4,43,2306};
        assertEquals(true,a.linearSearch(t4,4,9));
        assertEquals(false,a.linearSearch(t4,123,9));
        assertEquals("Abnormal",a.linearSearch(t4,1,18));
        assertEquals(true,a.linearSearch(t4,2306,9));
        int[] t5 = {967,65,5687,56,332,46,2306};
        assertEquals(true,a.linearSearch(t5,332,7));
        assertEquals(false,a.linearSearch(t5,12,7));
        assertEquals("Abnormal",a.linearSearch(t5,1,18));
        assertEquals(true,a.linearSearch(t5,967,7));
    }
    @org.junit.Test
    public void testSorting(){
        Comparable[] t6 = {1,2,4,67,3,2306};
        b.selectionSort(t6);
        assertEquals("1 2 3 4 67 2306 ",b.print(t6));
        Comparable[] t7 = {1,4,8,2,9,2306};
        b.selectionSort(t7);
        assertEquals("1 2 4 8 9 2306 ",b.print(t7));
        Comparable[] t8 = {1,2,6,8,9,2306};
        b.selectionSort(t8);
        assertEquals("1 2 6 8 9 2306 ",b.print(t8));
        Comparable[] t9 = {30,27,24,13,2306};
        b.selectionSort(t9);
        assertEquals("13 24 27 30 2306 ",b.print(t9));
        Comparable[] t10 = {99,98,92,2306};
        b.selectionSort(t10);
        assertEquals("92 98 99 2306 ",b.print(t10));
        Comparable[] t11 = {20,19,23,6};
        b.selectionSort(t11);
        assertEquals("6 19 20 23 ",b.print(t11));               //学号测试用例
    }
}
  • 结果截图
  1. IDEA(junit)
  2. 虚拟机命令行(用(1)的代码)


    码云

补全查找算法:斐波那契、二叉树、分块

public class Searching
{
    public boolean order(int[] arr,int target){
        int i=0;
        int a = target;
        while(arr[i]!=target)
        {
            i++;
            if(i==arr.length)
                break;
        }
        return i==arr.length?false:true;
    }
    public void sort(int arr[]){
        for(int i =1;i<arr.length;i++) {
            for(int j=0;j<arr.length-i;j++) {
                if(arr[j]>arr[j+1]) {
                    int temp = arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
    }
    public boolean binary(int[] arr,int min,int max,int mid,int target){
        boolean found = false;
        mid = (min + max) / 2;
        int midd = mid;
        if(arr[midd]==target)
            found = true;
        else if (arr[midd]!=target)
        {
            if(target<arr[midd])
            {
                max = midd-1;
                midd--;
                found = binary(arr,min,max,midd,target);
            }
            else if(target>arr[midd])
            {
                min = midd+1;
                midd++;
                found = binary(arr,min,max,midd,target);
            }
        }
        return found;
    }
    public int binaryshow(int[] arr,int min,int max,int mid,int target){
        int found = 0;
        mid = (min + max) / 2;
        int midd = mid;
        if(arr[midd]==target)
            found = arr[midd];
        else if (arr[midd]!=target)
        {
            if(target<arr[midd])
            {
                max = midd-1;
                midd--;
                found = binaryshow(arr,min,max,midd,target);
            }
            else if(target>arr[midd])
            {
                min = midd+1;
                midd++;
                found = binaryshow(arr,min,max,midd,target);
            }
        }
        return found;
    }
    public int[] hash(int[] arr){
        int[] arr1 = {0,0,0,0,0,0,0,0,0,0,0,0};
        for(int i=0;i<arr.length;i++)
        {
            if(arr1[arr[i]%11] == 0)
                arr1[arr[i]%11] = arr[i];
            else
            {
                for(int j=2;j<arr.length;j++)
                    if(arr1[j-1] == 0)
                    {
                        arr1[j-1] = arr[i];
                        break;
                    }
            }
        }
        return arr1;
    }
    public int hashsearch(int[] result,int target){
        int k = target%11,i,re = 0;
        if(result[k]==target)
            re =  result[k];
        else
        {
            for(i=k;k<result.length;k++)
            {
                if(result[k]==target)
                {
                    re = result[k];
                    break;
                }
            }
        }
        return re;
    }
    public Linked[] linkedhash(Linked[] linked){
        Linked[] arr1 = new Linked[12];
        int i;
        for(i=0;i<12;i++)
            arr1[i] = new Linked(0);
        for(i=0;i<linked.length;i++)
        {
            if((arr1[linked[i].getnum()%11]).getnum() == 0)
                arr1[linked[i].getnum()%11] = linked[i];
            else
            {
                arr1[linked[i].getnum()%11].setNext(linked[i]);
            }
        }
        return arr1;
    }
    public int linkedsearch(Linked[] re1, int target){
        int k = target%11,i,re = 0;
        if(re1[k].getnum()==target)
            re = re1[k].getnum();
        else
        {
            Linked re2 = re1[k].getNext();
            //re2 = new Linked(0);
            if(re2.getnum()==target)
                re = re2.getnum();
        }
        return re;
    }
    public static boolean FibonacciSearch(int[] table, int keyWord) {
        //确定需要的斐波那契数
        int i = 0;
        while (getFibonacci(i) - 1 == table.length) {
            i++;
        }
        //开始查找
        int low = 0;
        int height = table.length - 1;
        while (low <= height) {
            int mid = low + getFibonacci(i - 1);
            if (table[mid] == keyWord) {
                return true;
            } else if (table[mid] > keyWord) {
                height = mid - 1;
                i--;
            } else if (table[mid] < keyWord) {
                low = mid + 1;
                i -= 2;
            }
        }
        return false;
    }
    public static int getFibonacci(int n) {
        int res = 0;
        if (n == 0) {
            res = 0;
        } else if (n == 1) {
            res = 1;
        } else {
            int first = 0;
            int second = 1;
            for (int i = 2; i <= n; i++) {
                res = first + second;
                first = second;
                second = res;
            }
        }
        return res;
    }
    public static int InsertionSearch(int[] a, int value, int low, int high) {
        int mid = low + (value - a[low]) / (a[high] - a[low]) * (high - low);
        if (a[mid] == value)
            return a[mid];
        if (a[mid] > value)
            return InsertionSearch(a, value, low, mid - 1);
        else
            return InsertionSearch(a, value, mid + 1, high);
    }
    public static int blocking(int[] arr,int target){
        int[] ar1 = new int[arr.length];
        int[] ar2 = new int[arr.length];
        int[] ar3 = new int[arr.length];
        int i=0,j=0,k=0,l=0;
        int result = 0;
        for(i=0;i<arr.length;i++)
        {
            if(0<=arr[i]&&arr[i]<=20)
            {
                ar1[j] = arr[i];
                j++;
            }
            else if (20<arr[i]&&arr[i]<=60)
            {
                ar2[k] = arr[i];
                k++;
            }
            else
            {
                ar3[l] = arr[i];
                l++;
            }
        }
        i=0;
        if(0<=target&&target<=20)
        {
            for(i=0;i<ar1.length;i++)
                if(ar1[i]==target)
                {
                    result = ar1[i];
                    break;
                }
        }
        else if (20<target&&target<=60)
        {
            for(i=0;i<ar2.length;i++)
                if(ar2[i]==target)
                {
                    result = ar2[i];
                    break;
                }
        }
        else
        {
            for(i=0;i<ar3.length;i++)
                if(ar3[i]==target)
                {
                    result = ar3[i];
                    break;
                }
        }
        return result;
    }
    public String print(int[] arr){
        String result = "";
        for(int i=0;i<arr.length;i++)
            result += ""+arr[i]+" ";
        return result;
    }
}



码云

补充排序方法:希尔

import java.util.ArrayList;
import java.util.List;
public class Sorting
{
    public Sorting leftNode;
    public Sorting rightNode;
    public Object value;
    public static void ShellSort(int[] data)
    {
        int i= 0, temp = 0, j = 2;
        for (int incr = data.length / j; incr > 0; incr /= j)
        {
            for (int x = incr; x < data.length; x++)
            {
                temp = (int) data[x];
                for (i = x - incr; i >= 0; i -= incr)
                {
                    if (temp < (int) data[i])
                        data[i + incr] = data[i];
                    else
                        break;
                }
                data[i + incr] = temp;
            }
        }
    }
    public String print(int[] arr){
        String result = "";
        for(int i=0;i<arr.length;i++)
            result += ""+arr[i]+" ";
        return result;
    }
}


码云

Android实现各种排序与查找算法

  • 将两个类合并为一个复制到Android Studio中
import java.util.ArrayList;
import java.util.List;
public class Searching {
    public Searching leftNode;
    public Searching rightNode;
    public Object value;
    public boolean order(int[] arr,int target){
        int i=0;
        int a = target;
        while(arr[i]!=target)
        {
            i++;
            if(i==arr.length)
                break;
        }
        return i==arr.length?false:true;
    }
    public void sort(int arr[]){
        for(int i =1;i<arr.length;i++) {
            for(int j=0;j<arr.length-i;j++) {
                if(arr[j]>arr[j+1]) {
                    int temp = arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
    }
    public boolean binary(int[] arr,int min,int max,int mid,int target){
        boolean found = false;
        mid = (min + max) / 2;
        int midd = mid;
        if(arr[midd]==target)
            found = true;
        else if (arr[midd]!=target)
        {
            if(target<arr[midd])
            {
                max = midd-1;
                midd--;
                found = binary(arr,min,max,midd,target);
            }
            else if(target>arr[midd])
            {
                min = midd+1;
                midd++;
                found = binary(arr,min,max,midd,target);
            }
        }
        return found;
    }
    public int binaryshow(int[] arr,int min,int max,int mid,int target){
        int found = 0;
        mid = (min + max) / 2;
        int midd = mid;
        if(arr[midd]==target)
            found = arr[midd];
        else if (arr[midd]!=target)
        {
            if(target<arr[midd])
            {
                max = midd-1;
                midd--;
                found = binaryshow(arr,min,max,midd,target);
            }
            else if(target>arr[midd])
            {
                min = midd+1;
                midd++;
                found = binaryshow(arr,min,max,midd,target);
            }
        }
        return found;
    }
    public int[] hash(int[] arr){
        int[] arr1 = {0,0,0,0,0,0,0,0,0,0,0,0};
        for(int i=0;i<arr.length;i++)
        {
            if(arr1[arr[i]%11] == 0)
                arr1[arr[i]%11] = arr[i];
            else
            {
                for(int j=2;j<arr.length;j++)
                    if(arr1[j-1] == 0)
                    {
                        arr1[j-1] = arr[i];
                        break;
                    }
            }
        }
        return arr1;
    }
    public int hashsearch(int[] result,int target){
        int k = target%11,i,re = 0;
        if(result[k]==target)
            re =  result[k];
        else
        {
            for(i=k;k<result.length;k++)
            {
                if(result[k]==target)
                {
                    re = result[k];
                    break;
                }
            }
        }
        return re;
    }
    public Linked[] linkedhash(Linked[] linked){
        Linked[] arr1 = new Linked[12];
        int i;
        for(i=0;i<12;i++)
            arr1[i] = new Linked(0);
        for(i=0;i<linked.length;i++)
        {
            if((arr1[linked[i].getnum()%11]).getnum() == 0)
                arr1[linked[i].getnum()%11] = linked[i];
            else
            {
                arr1[linked[i].getnum()%11].setNext(linked[i]);
            }
        }
        return arr1;
    }
    public int linkedsearch(Linked[] re1, int target){
        int k = target%11,i,re = 0;
        if(re1[k].getnum()==target)
            re = re1[k].getnum();
        else
        {
            Linked re2 = re1[k].getNext();
            //re2 = new Linked(0);
            if(re2.getnum()==target)
                re = re2.getnum();
        }
        return re;
    }
    public static boolean FibonacciSearch(int[] table, int keyWord) {
        //确定需要的斐波那契数
        int i = 0;
        while (getFibonacci(i) - 1 == table.length) {
            i++;
        }
        //开始查找
        int low = 0;
        int height = table.length - 1;
        while (low <= height) {
            int mid = low + getFibonacci(i - 1);
            if (table[mid] == keyWord) {
                return true;
            } else if (table[mid] > keyWord) {
                height = mid - 1;
                i--;
            } else if (table[mid] < keyWord) {
                low = mid + 1;
                i -= 2;
            }
        }
        return false;
    }
    public static int getFibonacci(int n) {
        int res = 0;
        if (n == 0) {
            res = 0;
        } else if (n == 1) {
            res = 1;
        } else {
            int first = 0;
            int second = 1;
            for (int i = 2; i <= n; i++) {
                res = first + second;
                first = second;
                second = res;
            }
        }
        return res;
    }
    public static int InsertionSearch(int[] a, int value, int low, int high) {
        int mid = low + (value - a[low]) / (a[high] - a[low]) * (high - low);
        if (a[mid] == value)
            return a[mid];
        if (a[mid] > value)
            return InsertionSearch(a, value, low, mid - 1);
        else
            return InsertionSearch(a, value, mid + 1, high);
    }
    public static int blocking(int[] arr,int target){
        int[] ar1 = new int[arr.length];
        int[] ar2 = new int[arr.length];
        int[] ar3 = new int[arr.length];
        int i=0,j=0,k=0,l=0;
        int result = 0;
        for(i=0;i<arr.length;i++)
        {
            if(0<=arr[i]&&arr[i]<=20)
            {
                ar1[j] = arr[i];
                j++;
            }
            else if (20<arr[i]&&arr[i]<=60)
            {
                ar2[k] = arr[i];
                k++;
            }
            else
            {
                ar3[l] = arr[i];
                l++;
            }
        }
        i=0;
        if(0<=target&&target<=20)
        {
            for(i=0;i<ar1.length;i++)
                if(ar1[i]==target)
                {
                    result = ar1[i];
                    break;
                }
        }
        else if (20<target&&target<=60)
        {
            for(i=0;i<ar2.length;i++)
                if(ar2[i]==target)
                {
                    result = ar2[i];
                    break;
                }
        }
        else
        {
            for(i=0;i<ar3.length;i++)
                if(ar3[i]==target)
                {
                    result = ar3[i];
                    break;
                }
        }
        return result;
    }
    public static void ShellSort(int[] data)
    {
        int i= 0, temp = 0, j = 2;
        for (int incr = data.length / j; incr > 0; incr /= j)
        {
            for (int x = incr; x < data.length; x++)
            {
                temp = (int) data[x];
                for (i = x - incr; i >= 0; i -= incr)
                {

                    if (temp < (int) data[i])
                        data[i + incr] = data[i];
                    else
                        break;
                }
                data[i + incr] = temp;
            }
        }
    }
    public String selectionsort(String a)
    {
        String[] s = a.split("\\s");
        int[] b = new int[s.length];
        for(int i=0;i<b.length;i++)
        {
            int num = Integer.parseInt(s[i]);
            b[i]=num;
        }
        for(int i=0;i<b.length-1;i++)
        {
            for(int j=i+1;j<b.length;j++)
            {
                if(b[i]<b[j])
                {
                    int t = b[i];
                    b[i]=b[j];
                    b[j]=t;
                }
            }
        }
        String result="";
        for(int i=0;i<b.length;i++)
        {
            result+=" "+b[i];
        }
        return  result;
    }
    public String print(int[] arr){
        String result = "";
        for(int i=0;i<arr.length;i++)
            result += ""+arr[i]+" ";
        return result;
    }
}
  • 编写主活动
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
    EditText s1;
    EditText s2;
    EditText s3;
    EditText s4;
    Button a1;
    Button a2;
    Button a3;
    Button a4;
    Button a5;
    Button a6;
    Button a7;
    Button a8;
    Searching a = new Searching();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        s1 = findViewById(R.id.editText);
        s2 = findViewById(R.id.editText2);
        s3 = findViewById(R.id.editText3);
        s4= findViewById(R.id.editText4);
        a1 = findViewById(R.id.button);
        a2 = findViewById(R.id.button2);
        a3 = findViewById(R.id.button3);
        a4 = findViewById(R.id.button4);
        a5 = findViewById(R.id.button5);
        a6 =findViewById(R.id.button6);
        a7 = findViewById(R.id.button7);
        a8 = findViewById(R.id.button8);
        a1.setOnClickListener(select);
        a2.setOnClickListener(bubble);
        a3.setOnClickListener(shell);
        a4.setOnClickListener(order);
        a5.setOnClickListener(binary);
        a6.setOnClickListener(blocking);
        a7.setOnClickListener(hash);
        a8.setOnClickListener(feinaboqie);
    }
    View.OnClickListener select = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String b = s1.getText().toString();
            String result =a.selectionsort(b);
            s2.setText(result);
        }
    };
    View.OnClickListener bubble = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String b = s1.getText().toString();
            String[] c = b.split(" ");
            int[] d = new int[c.length];
            for(int i=0;i<c.length;i++)
            {
                int num = Integer.parseInt(c[i]);
                d[i] = num;
            }
            a.sort(d);
            s2.setText(a.print(d));
        }
    };
    View.OnClickListener shell = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String b = s1.getText().toString();
            String[] c = b.split(" ");
            int[] d = new int[c.length];
            for(int i=0;i<c.length;i++)
            {
                int num = Integer.parseInt(c[i]);
                d[i] = num;
            }
            a.ShellSort(d);
            s2.setText(a.print(d));
        }
    };
    View.OnClickListener order = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String b1 =s3.getText().toString();
            int target = Integer.parseInt(b1);
            String b = s1.getText().toString();
            String[] c = b.split(" ");
            int[] d = new int[c.length];
            for(int i=0;i<c.length;i++)
            {
                int num = Integer.parseInt(c[i]);
                d[i] = num;
            }
            a.sort(d);
            String re = a.order(d,target)+"";
            s4.setText(re);

        }
    };
    View.OnClickListener binary = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String b1 =s3.getText().toString();
            int target = Integer.parseInt(b1);
            String b = s1.getText().toString();
            String[] c = b.split(" ");
            int[] d = new int[c.length];
            for(int i=0;i<c.length;i++)
            {
                int num = Integer.parseInt(c[i]);
                d[i] = num;
            }
            a.sort(d);
            String re = a.binary(d,0,d.length,5,target)+"";
            s4.setText(re);
        }
    };
    View.OnClickListener blocking =  new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String b1 =s3.getText().toString();
            int target = Integer.parseInt(b1);
            String b = s1.getText().toString();
            String[] c = b.split(" ");
            int[] d = new int[c.length];
            for(int i=0;i<c.length;i++)
            {
                int num = Integer.parseInt(c[i]);
                d[i] = num;
            }
            String re = a.blocking(d,target)+"";
            s4.setText(re);
        }
    };
    View.OnClickListener hash = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String b1 =s3.getText().toString();
            int target = Integer.parseInt(b1);
            String b = s1.getText().toString();
            String[] c = b.split(" ");
            int[] d = new int[c.length];
            for(int i=0;i<c.length;i++)
            {
                int num = Integer.parseInt(c[i]);
                d[i] = num;
            }
            int result[] = a.hash(d);
            String re = a.hashsearch(result,target)+"";
            s4.setText(re);
        }
    };
    View.OnClickListener feinaboqie = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String b1 =s3.getText().toString();
            int target = Integer.parseInt(b1);
            String b = s1.getText().toString();
            String[] c = b.split(" ");
            int[] d = new int[c.length];
            for(int i=0;i<c.length;i++)
            {
                int num = Integer.parseInt(c[i]);
                d[i] = num;
            }
            String re = a.FibonacciSearch(d,target)+"";
            s4.setText(re);
        }
    };
}
  • 布局文件
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="40dp"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="32dp"
        android:text="Input"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.582"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="132dp"
        android:text="selection"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.054"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="132dp"
        android:text="bubble"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.538"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="88dp"
        android:layout_marginLeft="88dp"
        android:layout_marginTop="132dp"
        android:text="shell"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.931"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="84dp"
        android:text="Result"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.107"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="76dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.582"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.124" />
    <EditText
        android:id="@+id/editText3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="4dp"
        android:layout_marginLeft="4dp"
        android:layout_marginBottom="44dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.573"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.668" />
    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="9dp"
        android:text="@android:string/search_go"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.108"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/editText3"
        app:layout_constraintVertical_bias="0.028" />
    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="112dp"
        android:text="order"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.089"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.849" />
    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="52dp"
        android:text="binary"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.863" />
    <Button
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="blocking"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.947"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.874" />
    <Button
        android:id="@+id/button7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="84dp"
        android:layout_marginLeft="84dp"
        android:layout_marginBottom="4dp"
        android:text="hash"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
    <Button
        android:id="@+id/button8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dp"
        android:text="Fibonacci"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.747"
        app:layout_constraintStart_toStartOf="parent" />
    <EditText
        android:id="@+id/editText4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.582"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.727" />
    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Result"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.107"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.716" />
</androidx.constraintlayout.widget.ConstraintLayout>

3. 实验过程中遇到的问题和解决过程

  • 问题一:数组输出为地址值,而不是数组值;
  • 问题一解决:定义方法为String类型,并使用Arrays.toString方法输出。
  • 问题二:使用递归实现二分法查找时,递归无法结束;
  • 问题二解决:在此程序中,mid这个反复传入递归中的变量的值始终没有改动,导致在每一次递归时都不会出现任何变化修改代码,将mid的值修改为在递归前发生变化可解决此问题。

其他(感悟、思考等)

  • 这次的实验涉及到多种查找和排序的方法,不同的方法有不同的逻辑和效率,一般来说,越简单、越好理解的方法,效率不怎么高,所以当我们需要进行更高层次的编程工作的时候,就需要锻炼逻辑思维能力,掌握较为复杂但是能够提高程序性能的算法;
  • Android的布局有点恶心人了,死亡覆盖。

参考资料

posted @ 2020-11-28 17:33  20192306孙洪丽  阅读(148)  评论(0编辑  收藏  举报