1. 程式人生 > >陣列排序之直接選擇排序

陣列排序之直接選擇排序

一、基本思想

直接選擇排序屬於選擇排序的一種,其排序速度要比氣泡排序快,其基本思想就是將指定排序位置與其他陣列元素分別進行對比,如果滿足條件就交換元素值,注意區別冒牌排序,這裡不是交換相鄰元素,而是把滿足條件的元素與指定的排序位置交換(如從最後一個元素開始排序),這樣排序好的位置逐漸擴大,最後整個陣列都已成為排序好的格式。

這就好比軍訓時排隊一樣,先從一群學生中找出最高的放在第一位,然後在選出第二高的放在第二位,一次類推直到結束。與氣泡排序相比,直接選擇排序的交換次數要少很多,所以速度會更快一些。

二、演算法實現

package cn.szxy.hq;

/**
 * Created by HQ on 2018/9/30.
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] array = {12, 78, 22, 63, 65, 40, 23};
        SelectSort selectSort=new SelectSort();

        System.out.println("排序前:");
        selectSort.showArray(array);
        selectSort.sort(array);
        System.out.println("排序後:");
        selectSort.showArray(array);
    }

    /**
     * 直接選擇排序
     * @param array
     */
    public void sort(int[] array) {
        int index;
        for (int i = 1; i < array.length; i++) {
            index = 0;  //  記載下標
            for (int j = 1; j < array.length - i; j++) {
                if (array[j] > array[index]) {
                    index = j;
                }
            }
            //交換位置在array.length-i和index(最大值)上的兩個數
            int temp = array[array.length - i];//把第一個元素儲存到臨時變數中
            array[array.length - i] = array[index];//把第二個元素值儲存到第一個元素中
            array[index] = temp;//把臨時變數的值儲存到第二個元素中
        }
    }

    /**
     * 顯示陣列中的元素
     *
     * @param array
     */
    public void showArray(int[] array) {
        for (int i : array) {   //遍歷陣列
            System.out.print(i + " ");    //輸出每一個元素的值
        }
        System.out.println();
    }
}

三、執行結果