三種基本的排序程序(多態)

這個程序主要是爲了熟悉冒泡,選擇,插入三種排序方法。還可以理解靜態方法的使用,和一種比較簡潔的二值交換程序。

import java.util.Scanner;
import java.util.Arrays;
public class manySort{
public static void main(String []args){
    Scanner input = new Scanner(System.in);
    show("input a num: ");
    int count = input.nextInt();
    int [] arrays1 = new int [count];
    show("input everyone in array");
    for(int k =0;k<count;k++){
	arrays1[k] = input.nextInt();
    }
    int [] arrays2 = Arrays.copyOf(arrays1,arrays1.length);
    int [] arrays3 = Arrays.copyOf(arrays1,arrays1.length);
//  System.out.println(Arrays.toString(arrays2));
    show("the result of bubbleSort:");
    bubbleSort(arrays1);
    printArray(arrays1);
    show("the result of selectSort:");
    selectSort(arrays2);
    printArray(arrays2);
    show("the result of insertSort:");
    insertSort(arrays3);
    printArray(arrays3);
  }
public static void show(String name)
{
    System.out.println(name);
}
public static void bubbleSort(int [] array)
{
    for(int i=0;i<array.length-1;i++){
	for(int j=0;j<array.length-1-i;j++){
	    if(array[j]>array[j+1]){
		array[j] = array[j+1]-array[j]+(array[j+1]=array[j]);
	}
	}
    }
}
public static void selectSort(int [] array)
{
    for(int i=0;i<array.length-1;i++){
 //System.out.println("OK2");
	int min = i;
	for(int j=i+1;j<array.length;j++){
 //System.out.println("OK3");
	    if(array[min]>array[j])
		min = j;
	}
 //System.out.println("OK1");
	if(i != min)
	    array[i]=array[min]-array[i]+(array[min]=array[i]);
    }    
}
public static void insertSort(int [] array)
{
    for (int i=1;i<array.length;i++){
	int j = i;
	int temp = array[i];
	while(j>0 && temp<array[j-1]){
	array[j] = array[j-1];
	j--;	
	}
    	array[j] = temp;
    }
}
public static void printArray(int[] array)
{
    for(int i=0;i<array.length;i++){
	System.out.print(array[i]+" ");
    }
    System.out.print("\n");
}
}

又寫了一遍,啊啊啊!!!

import java.util.Scanner;
import java.util.Arrays;
public class manySort{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("please input the number of array: ");
        int num = input.nextInt();
        int[] arrays = new int[num];
        System.out.println("please input everyone in array: ");
        for(int i=0;i<arrays.length;i++){
            arrays[i] = input.nextInt();
        }
        Buddle b = new Buddle("BuddleSort");
        Select s = new Select("SelectSort");
        Insert i = new Insert("InsertSort");
        SelectSort S = new SelectSort();
        // S.Set(b);
        S.Set(s);
        //S.Set(i);
        S.Sorts(arrays);
        S.Print(arrays);
    }
}

//class寫成Class,注意形參的設計
class SelectSort{
    private Sort s = null;
    public void Set(Sort s){
        this.s =s;
    }
    public void Sorts(int[] arrays){
        s.Algorithm(arrays);
    }
    public void Print(int[] arrays){
        s.printArr(arrays);
    }
}

abstract class Sort{ 
    private String name;
    public Sort(String name){
        this.name = name;
    }
    public abstract void Algorithm(int[] arrays);
    
    public String getName(){
        return name;
    }

    public void printArr(int[] arrays){
        if(arrays.length == 0){
            System.out.println("NO Value");
        }
        System.out.print(getName()+":"); 
        boolean flag = false;    //flag 不能寫成int類型的,boolean——false,true
        for(int i:arrays){           //for循環
            if(!flag){
                flag = true;
            }else{
                System.out.print("<");
            }
                System.out.print(i);                    
        }
    }
}

class Buddle extends Sort{
    public Buddle(String name){
        super(name);
    }
    public void Algorithm(int[] arrays){
        for(int i=0;i<arrays.length-1;i++)
        {
            for(int j=0;j<arrays.length-1-i;j++)
            {
                if(arrays[j]>arrays[j+1]){
                    arrays[j] = arrays[j+1]-arrays[j]+(arrays[j+1]=arrays[j]);
                }
            }
        }
    }
}
class Select extends Sort{
    public Select(String name){
        super(name);
    }
    public void  Algorithm(int[] arrays){
        int min;
        for(int i=0;i<arrays.length-1;i++)
        {
            min = i;
            for(int j=i+1;j<arrays.length;j++){
                if(arrays[min]>arrays[j]){
                    min = j;
                }
            }
            //這一點沒想好
            if(i != min){
              arrays[i] = arrays[min]-arrays[i]+(arrays[min]=arrays[i]);
            }
            //arrays[i] = arrays[min];
        }
    }
}
class Insert extends Sort{
    public Insert(String name){
        super(name);
    }
    public void Algorithm(int[] arrays){
        int j;
        int temp;
        for(int i=1;i<arrays.length;i++){
            j = i;
            temp = arrays[i];
            while(j>0&&temp<arrays[j-1])
            {
                arrays[j] = arrays[j-1];
                j--;
            }
            arrays[j] = temp;
        }
    }
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章