Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1707004544 李浩 #34

Open
wmpscc opened this issue Nov 25, 2017 · 0 comments
Open

1707004544 李浩 #34

wmpscc opened this issue Nov 25, 2017 · 0 comments

Comments

@wmpscc
Copy link
Member

wmpscc commented Nov 25, 2017

java培训(一)

快速和插入排序算法以前没学过,参考百度的

  • Test.java
public class Test {
    public static void main(String[] args) {
        //自己用键盘输入int a[10]
        int []a = new int[10];
        Scanner in = new Scanner(System.in);

        for (int i = 0; i < 10; i++)
            a[i] = in.nextInt();
        Factory factory = new Factory();
// 选择排序
        BaseSort select_sort = new SelectSort();
        factory.setSort(select_sort);
        factory.dosort(a);
// 插入排序
        BaseSort insert_sort = new InsertSort();
        factory.setSort(insert_sort);
        factory.dosort(a);
// 快速排序
        BaseSort quick_sort = new QuickSort();
        factory.setSort(quick_sort);
        factory.dosort(a,0,a.length-1);
    }
}
  • Factory.java
public class Factory {
    private BaseSort sort;
    //依赖注入
    public void setSort(BaseSort sort){
        this.sort = sort;
    }
    public void dosort(int[] a){
        sort.sort(a);
    }
    public void dosort(int[] a,int low,int high) {
        sort.sort(a,low,high);
        sort.print();
    }
}
  • BaseSort.java
public class BaseSort {
    public void sort(int []a){
        System.out.println("排序算法");
    }
    public void sort(int[] a,int low,int high){
    }
    public void print(){
    }
}
  • SelectSort.java
public class SelectSort extends BaseSort {
    @Override
    public void sort(int[] a) {
        super.sort(a);
        int minid,i,j,temp;
        for(i = 0; i < a.length; i++){
            minid = i;
            for(j =  i + 1; j < a.length; j++) {
                if(a[minid] > a[j]){
                    minid = j;
                }
            }
            temp = a[minid];
            a[minid] = a[i];
            a[i] = temp;
        }
        for (int t:a) {
            System.out.println(t);
        }
    }
}
  • InsertSort.java
public class InsertSort extends BaseSort {
    @Override
    public void sort(int[] a) {
        super.sort(a);
        for(int i = 1; i < a.length; i++){
            for(int j = i; j > 0; j--){
                if(a[j] < a[j-1]){
                    int temp = a[j];
                    a[j] = a[j-1];
                    a[j-1] = temp;
                }else{
                    break;
                }
            }
        }
        for (int t:a ) {
            System.out.println(t);
        }
    }
}
  • QuickSort.java
public class QuickSort extends BaseSort {
    int[] result = new int[10];
    @Override
    public void sort(int[] a,int low,int high) {
        super.sort(a);
        int start = low;
        int end = high;
        int key = a[low];
        while(end>start){
            //从后往前比较
            while(end>start&&a[end]>=key)  //如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
                end--;
            if(a[end]<=key){
                int temp = a[end];
                a[end] = a[start];
                a[start] = temp;
            }
            //从前往后比较
            while(end>start&&a[start]<=key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
                start++;
            if(a[start]>=key){
                int temp = a[start];
                a[start] = a[end];
                a[end] = temp;
            }
            //此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
        }
        //递归
        if(start>low) sort(a,low,start-1);//左边序列。第一个索引位置到关键值索引-1
        if(end<high) sort(a,end+1,high);//右边序列。从关键值索引+1到最后一个
        result = a;
    }
    @Override
    public void print(){
        for (int t:result) {
            System.out.println(t);
        }
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant