选择排序是一种简单直观的排序算法。
思路:
首先在原数列中找到最小(or最大)的元素,然后将其存放到数组的起始位置。
再从剩余未排序的元素中继续寻找最小(or最大)的元素,然后放到已排序好的数组的末尾。
以此类推,直到全数组排序完成。
public class selectionSort {
public static void main(String[] args) {
int [] arr = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
System.out.println("原arr数组:"+ Arrays.toString(arr));
// 大循环控制循环次数
// 小循环查找最小项
// 若与大循环次数序号不相等则交换位置
for (int i = 0; i < arr.length - 1; i++) { // 控制循环次数
int minIndex = i;
for (int j = minIndex + 1; j < arr.length; j++) { // 比较找出最小的 ,并且交换位置
if (arr[j] < arr[minIndex]) {
minIndex = j; // j为最小元素
}
}
if (i != minIndex ) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
System.out.print("选择排序后的arr:"+ Arrays.toString(arr));
}
}
运行结果:
时间复杂度:
若被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历N-1次。因此,选择排序的时间复杂度是O(N²)。
选择排序的时间复杂度是O(N²)。
稳定性: 稳定
算法稳定性 – 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的!