紫米 PurPods Pro 真無線耳機已支援降風噪模式
阿新 • • 發佈:2021-01-31
技術標籤:Java資料結構Java資料結構選擇排序排序演算法java
一、選擇排序演算法基思想
從陣列中選擇最小元素,將它與陣列的第一個元素交換位置。再從陣列剩下的元素中選擇出最小的元素,將它與陣列的第二個元素交換位置。不斷進行這樣的操作,直到將整個陣列排序,即陣列長度為n需要需要進行n-1次選擇排序才可以完成從小到大的排序,一般選擇排序的平均時間複雜度為O(n^2)。
二、選擇排序圖解
黃色表示已排序部分,藍色表示未排序部分,紅色表示從未排序中選擇的最小值。
三、程式碼實現
package Sort;
import java.util.Arrays;
public class SelectSort {
public static void selectsort(int[] arr) {
for(int i=0;i<arr.length-1;i++) {// //最後一個元素沒有必要給它排序,即資料有n個只需要進行n-1次選擇排序
int minIndex=i;//假設最小值索引在i位置上,則最小值為arr[i]
for(int j=i+1;j<arr.length;j++) {
if(arr[j]<arr[minIndex]) {//此排序為升序排序,若為降序排序則為arr[j]>arr[minIndex]
minIndex=j;//若發現有值小於預先設定的最小索引所在的值,進行索引交換,便於進行索引對應的元素值交換
}
}
int temp=arr[i];//將假設i位置上的元素值與最小索引位置的元素值交換
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
}
public static void main(String[] args) {
int[] arr= {101,34,119,1};
System.out.println("選擇排序前:");
System.out.println(Arrays.toString(arr));
selectsort(arr);
System.out. println("選擇排序後:");
System.out.println(Arrays.toString(arr));
}
}
執行結果:
從上圖可以看出:選擇排序一共進行arr.length-2次大迴圈,因為最後一個元素已經沒有必要再次進行排序,且資料有n個只需要進行n-1次選擇排序。
四、選擇排序演算法效能測試
package Sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class SelectSort {
public static void selectsort(int[] arr) {
for(int i=0;i<arr.length-1;i++) {// //最後一個元素沒有必要給它排序,即資料有n個只需要進行n-1次選擇排序
int minIndex=i;//假設最小值索引在i位置上,則最小值為arr[i]
for(int j=i+1;j<arr.length;j++) {
if(arr[j]<arr[minIndex]) {//此排序為升序排序,若為降序排序則為arr[j]>arr[minIndex]
minIndex=j;//若發現有值小於預先設定的最小索引所在的值,進行索引交換,便於進行索引對應的元素值交換
}
}
int temp=arr[i];//將假設i位置上的元素值與最小索引位置的元素值交換
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
}
public static void main(String[] args) {
int[] arr = new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i] = (int) (Math.random() * 8000000); // 生成一個[0, 8000000) 數
}
Date date1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//SimpleDateFormat是Java提供的一個格式化和解析日期的工具類
String date1Str = simpleDateFormat.format(date1);
System.out.println("選擇排序前的時間是:" + date1Str);
selectsort(arr);
Date date2 = new Date();
String date2Str = simpleDateFormat.format(date2);
System.out.println("選擇排序後的時間是:" + date2Str);
}
}
選擇排序前的時間是:2021-01-31 12:21:58
選擇排序後的時間是:2021-01-31 12:21:59
選擇排序測試80000個數據一共需要1s左右的時間。