排序算法有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);
}
}