選擇排序---學習筆記

選擇排序—學習筆記

基本思想:

每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。

排序過程

初始關鍵字 [49 38 65 97 76 13 27 49]
第一趟排序後 13 [38 65 97 76 49 27 49]
第二趟排序後 13 27 [65 97 76 49 38 49]
第三趟排序後 13 27 38 [97 76 49 65 49]
第四趟排序後 13 27 38 49 [49 97 65 76]
第五趟排序後 13 27 38 49 49 [97 97 76]
第六趟排序後 13 27 38 49 49 76 [76 97]
第七趟排序後 13 27 38 49 49 76 76 [ 97]
最後排序結果 13 27 38 49 49 76 76 97


public class selectSort {

    //循環遍歷整個數組,每輪將未排序區域的第一個元素作爲最小元素min,記錄此時的最小值的索引值minIndex,
    //將這個元素與下一個元素比較,如果這個元素比最小值min還小,則將這個數的索引值賦給minIndex,繼續往
    //下遍歷,直到遍歷一輪完成,則將最小索引值minIndex對應的元素與此次遍歷的第一個元素換位

////////////////////////////////////////////////////////////    
    /**選擇排序
     * @param array 等待排序的數組
     */
    public void select(Integer[] array) {
        //定義一個最小索引值
        int minIndex=0;

        for (int i = 0; i < array.length; i++) {

            //每次從當前待排序的區域的第一個元素的下一個元素j開始比較,如果這個元素比最小值小,
            //則將這個元素的索引值賦給minIndex.當遍歷完成則將最小值索引對應的值與此待排數組
            //的第一個元素交換位置,然後排列好的數組的序列號加1,即i的值(i代表的是待排序列的
            //第一個元素的索引,同時也是排列好元素的個數)

            for (int j = i+1; j < array.length; j++) {
                if (array[j].compareTo(array[minIndex])<0) {
                    minIndex=j;
                }
            }
            transposition(array, minIndex, i);
        }

    }



    public void selectMax(Integer[] array) {

        int MaxIndex;
        /*將待排數組的最後一個元素作爲最大值,每一次從待排數組中找出最大值,
         * 然後將最大值的索引賦給MaxIndex,
         * 
         * 
         * */


    }
//////////////////////////////////////////////////////////////  
    /**交換數組中的兩個數字的位置
     * @param array  需要交換位置的數組
     * @param i      需要交換的數組的位置1
     * @param j      需要交換的數組的位置2
     */
    private void transposition(Integer[] array, int i, int j) {

        int temp;
        temp=array[i];
        array[i]=array[j];
        array[j]=temp;
    }


   /**測試
 * @param args
 */
public static void main(String[] args) {   

    Integer[] intgArr=new Integer[]{3,1,2,4,6,5,8,7,6,9,0};

    //產生隨機數
//       Integer[] intgArr = new Integer[10000]; 
//       
//       Random random = new Random();
//       
//       
//       for (int i = 0; i < intgArr.length; i++) {
//      intgArr[i]=(int)random.nextInt(100000);
//  }


       long startTime=System.currentTimeMillis();

       selectSort insertSort = new selectSort();

       insertSort.select(intgArr);

       for(Integer intObj:intgArr){

            System.out.print(intObj + " ");
       }  

       long endTime=System.currentTimeMillis();
       System.out.println("花費了"+(endTime-startTime)+"毫秒");

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