一、選擇排序(ChooseSort)
每次選擇一個數,與全部數分別比較,確定出最小值的座標,然後與選擇的數進行交換。算法不穩定。
選擇排序的時間複雜度爲O(n^2),空間複雜度爲O(1)。最好最壞也就是平均是O(n^2)
二、圖解
每次記錄最小值的座標,然後與選擇的數進行交換
三、算法分析
步驟:
1、需要排序的數組
2、第一次for循環,n-1次選擇數
3、定義變量index保存當前循環索引值,每當數比選擇的數要小,則改變index爲數小的索引值,最終index爲最小數的索引
4、判斷當前循環索引值是否與index相同,相同則不作任何操作,否則互換兩個索引的值
四、算法實現
package com.arithmetic.sort;
/**
* @Description
* 功能:實現選擇排序
* 每次選擇一個數爲標準,找出最小的數,最後將選擇的數和最小數交換位置
* 時間複雜度O(n^2);空間複雜度O(1);不穩定;算法複雜度最好與最壞情況都是O(n^2)
* @Author xuexue
* @Date 2019/11/9 20:25
*/
public class ChooseSort {
public static void main(String[] args) {
int[] arrs = new int[]{3, 5, 2, 1, 4, 10};
chooseSort(arrs);
for (int arr : arrs) {
System.out.println(arr);
}
}
/**
* 選擇排序算法實現
* 1、需要排序的數組
* 2、第一次for循環,n-1次選擇
* 3、定義變量index保存當前的循環索引值,如果找出了最小的數,則改變index的下標爲最小數索引
* 4、內循環,判斷並找出最小的數,保存其索引值
* 5、判斷當前循環索引值是否與index相同,相同則不作任何操作,否則互換兩個索引的值
* @param arr
*/
public static void chooseSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {//每一次選擇的數 總共需要選擇n-1個
//每一次選擇的數和其它數 算法複雜度:n-1/n-2/n-3/../1 (1+n-1)n/2=n^2
int index = i;//記錄最小數的位置
for (int j = i + 1; j < arr.length; j++) {
//與冒泡排序比較,交互次數少,但是不穩定如 2 5 2 1 4
if (arr[index] > arr[j])
index = j;//記錄最小數位置
}
//進行交換 最多交換n-1次
if (index != i) {
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
}
}
}
運行結果: