1. 程式人生 > >JAVA冒泡演算法和選擇演算法程式碼

JAVA冒泡演算法和選擇演算法程式碼



import java.util.Random;
import java.io.Serializable;
import java.lang.Comparable;
import java.util.Comparator;

public class InnerSort {
   
   
    public InnerSort(){
        super();
    }
   
    /*
     * 含義:利用隨機函式,建立一個有10個元素的陣列
     * 輸入: null
     * 輸出:Integer []
     */
    public int [] creatArray(){
        Random ran = new Random();
        int [] array = new int [10];
        for(int i=0;i<10;i++){
            array[i] = ran.nextInt(100) - ran.nextInt(100);
        }
        return array;
    }
   
    /*
     * 含義:標準輸出陣列的所有元素,並且在輸出完
     *         畢最後一個元素後執行換行操作
     * 輸入:Integer []
     * 輸出:null
     */
    public void printArray(int [] array){
        for(int i : array){
            System.out.print(i+"/t");
        }
        System.out.print("/n");
    }
   
    /*
     * 含義:氣泡排序,每次比較相鄰兩個數字是否滿足比較需要,從而決定是
     *         否交換順序,每排序一次就會把最大或者最小的數字放在最右邊的位置
     *
     * 範圍:氣泡排序,隸屬於<交換排序>
     * 輸入:Integer []
     * 輸出:Integer []
     */
    public int [] getMaoPaoSort(int [] array){
        for(int j = array.length ;j>0;j--){
            for(int i=0;i<j-1;i++){
                if(array[i]<array[i+1]){
                    int temp = array[i];
                    array[i] = array[i+1];
                    array[i+1] = temp;
                }
            }
        }
       
        return array;
    }
   
    /*
     * 含義:直接選擇排序,取第一個值與陣列中的每個值均比較一次,從中取出最大或
     *               者最小的一個值,放在陣列的第一個位置,依次迴圈。
     * 範圍:直接選擇排序 隸屬於<選擇排序>
     * 輸入:Integer []
     * 輸出:Integer []
     */
    public int [] getChooseSortWay1(int [] array){
        for(int i=0;i<array.length-1;i++){
            for(int j=i;j<array.length;j++){
                if(array[i] < array[j]){
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
        return array;
    }
   
    /*
     * 含義:直接選擇排序,取第一個值與陣列中的每個值均比較一次,從中取出最大或
     *               者最小的一個值,放在陣列的第一個位置,依次迴圈。
     * 範圍:直接選擇排序 隸屬於<選擇排序>
     * 輸入:Integer []
     * 輸出:Integer []
     * 特點:取陣列第一個值一次與後面的值比較,滿足比較要求則取其陣列下標,第一次循
     *         環一遍得到該陣列中最大的一個最大或者最小的陣列值的下標,然後把陣列的最
     *         後一個下標的值與,剛才比較得到的最大或者最小值下標兩個位置交換,然後執
     *         行第二次的迴圈操作,只是這次操作迴圈的長度比上一次減1.
     * [與getChooseSortWay1相比:getChooseSortWay1兩個值相互比較,滿足要求立
     *     刻執行值的交換,而getChooseSortWay2是在迴圈了一遍之後得到下標之後與最後一
     *     個位置的值交換位置:這裡指的最後一個位置是隨著外迴圈i的更改而改變的。從而減少
     *  了陣列值交換的次數,提高效率,從原理上講getChooseSortWay2和getChooseSortWay1
     *  所迴圈的次數是相等的]
     */
    public int [] getChooseSortWay2(int [] array){
        for(int i=1;i<array.length-1;i++){
            int index = 0;
            for(int j = 1;j<array.length - i;j++){
                if(array[j]>array[index]){
                    index = j;
                }
            }
            int temp = array[array.length-i];
            array[array.length-i] = array[index];
            array[index] = temp;
        }
        return array;
    }
   
    public int [] switchArrayValues(int [] array ,int x ,int y){
        int temp = array[x];
        array[x] = array[y];
        array[y] = temp;
        return array;
    }
   
    public String getSubString (String str,int index){
       
        String allStr = str;
        int SplitBytes = index;
        int BytesNum = 0;
        if(allStr.length()%SplitBytes == 0){
            BytesNum = (allStr.length()/SplitBytes);
        }else{
            BytesNum = allStr.length()/SplitBytes+1;
        }
        System.out.println("BytesNum:"+BytesNum);
        for(int i =0;i<= BytesNum;i++){
            if(i == BytesNum){
                str = allStr.substring((i-1)*SplitBytes, allStr.length());
            }else{
                str = allStr.substring((i-1)*SplitBytes, (i*SplitBytes));
            }
        }
       
        return str;
       
    }
   
    /*
     * 主函式
     */
    public static void main(String [] args){
       
        InnerSort in = new InnerSort();
        int [] array =  in.creatArray();
        //排序前陣列:
        in.printArray(array);
        System.out.println(array.length);
       
        //執行排序操作
        array = in.getChooseSortWay2(array);
       
        //排序後陣列
        in.printArray(array);
       
       
    }

   
}