選擇排序演算法
作業原理:
每一次從待排序的資料元素中選中最小的一個元素,然后,再從剩余未排序元素中繼續尋找最小元素,將2個元素交換位置,就達到了已排序的元素一直是從小到大了,
這個演算法的時間復雜度為O(n2),空間復雜度為O(1),
/**
* @Author: 翰林猿
* @Description:選擇排序
**/
public class Select {
public Select() {
}
?
public static void SelectionSort(int[] arr) {
//i: 當前位置 j: 從當前位置開始增加的變數(用于從當前位置開始遍歷,減少遍歷量)
for (int i = 0; i < arr.length; i++) { //遍歷陣列,發現最小的,與當前的交換
int min_index = i; //用于記錄最小項的下標
for (int j = i; j < arr.length; j++) { //從當前位置開始遍歷,找到最小的
if (arr[min_index] > arr[j]) { //如果最小項大于j處項
min_index = j;
}
}
//到此為止,我們已經找到了比當前位置i小的最小項,將二者交換即可,
swap(min_index, i, arr);
}
}
?
public static void swap(int min_index, int i, int[] arr) {
int t = arr[min_index];
arr[min_index] = arr[i];
arr[i] = t;
}
?
public static void main(String[] args) {
int[] arr = {1, 8, 9, 7, 3, 5, 6};
Select.SelectionSort(arr);
for (int it : arr) {
System.out.println(it);
}
}
}
當然,為了匹配多種型別的物件,可以使用泛型匹配各類物件的排序
/**
* @Author: 翰林猿
* @Description:選擇排序
**/
public class Select {
public Select() {
}
?
public static <E extends Comparable<E>>void SelectionSort(E[] arr) {
//i: 當前位置 j: 從當前位置開始增加的變數(用于從當前位置開始遍歷,減少遍歷量)
for (int i = 0; i < arr.length; i++) { //遍歷陣列,發現最小的,與當前的交換
int min_index = i; //用于記錄最小項的下標
for (int j = i; j < arr.length; j++) { //從當前位置開始遍歷,找到最小的
if (arr[min_index].compareTo(arr[j]) < 0) { //如果最小項大于j處項
min_index = j;
}
}
//到此為止,我們已經找到了比當前位置i小的最小項,將二者交換即可,
swap(min_index, i, arr);
}
}
?
public static <E> void swap(int min_index, int i, E[] arr) {
E t = arr[min_index];
arr[min_index] = arr[i];
arr[i] = t;
}
?
public static void main(String[] args) {
Integer[] arr = {1, 8, 9, 7, 3, 5, 6};
Select.SelectionSort(arr);
for (int it : arr) {
System.out.println(it);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/553441.html
標籤:其他
上一篇:蟻景科技受邀參加教育部虛擬教研室公共安全類學科協作組啟動儀式
下一篇:返回列表
