天天看點

選擇排序java實作

排序算法有8大,分别是:直接插入排序,希爾排序這兩個是插入排序,簡單選擇排序,堆排序,這兩個是選擇排序,冒泡排序快速排序,這兩個是交換排序,還有歸并排序跟基數排序。

下面來介紹選擇排序的實作,以及十萬資料排序需要多久效率比較。其他的排序可以看我資料結構分類。

選擇排序原理就是每一輪對比都将一個資料确定位置。

import java.util.Arrays;

/**
 * @Author: taoqianlilang
 * @Description:
 * @Date: Created in 16:32 2020/4/10
 * @Modified By:
 */
public class SelectSort {


    public static void sort(int [] arr){

        //這裡為什麼比較次數少一次是因為 n個數,n-1個數都知道位置了,最後一個就不用比較了
        for (int i=0;i<arr.length-1;i++){
            //假設最小數的下标minIndex 為i
            int minIndex=i;
            //最小數的值為min
            int min=arr[i];
            //需要從i的後一個數進行比較,i前面的都已經是最終位置
            for (int j=i+1;j<arr.length;j++){
                //如果出現了比假設值小的資料
                if (min>arr[j]){
                    //把小的值給min,使得min保持值最小
                    min=arr[j];
                    //把最小資料的标,指派給最小的下标
                    minIndex=j;
                }
            }
            //出内循環後,隻要假設的不是最小的,就要替換位置
            if (minIndex!=i){
                //這個arr[i]的大值指派給後面小值的下标,這裡不需要害怕小值的内容被覆寫,因為小值儲存在min中
                arr[minIndex]=arr[i];
                //換小值
                arr[i]=min;
            }
        }
    }
    public static void main(String[] args) {

        int [] arr=new int[100000];

        for (int i=0;i<arr.length;i++){
            arr[i]= (int) (Math.random()*100000);
        }
        long timeMillis0 = System.currentTimeMillis();
        sort(arr);
        long timeMillis1 = System.currentTimeMillis();
        System.out.println((timeMillis1-timeMillis0)/1000);

    }

}