原文作者:Mr.Seven
原文地址:八大排序算法总结与java实现
❤查看排序算法动态演示❤查看排序算法动态演示❤查看排序算法动态演示
选择排序(Selection Sort)
从算法逻辑上看,选择排序是一种简单直观的排序算法,在简单选择排序过程中,所需移动记录的次数比较少。
基本思想
选择排序的基本思想:比较 + 交换。
在未排序序列中找到最小(大)元素,存放到未排序序列的起始位置。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
算法描述
- 从待排序序列中,找到关键字最小的元素;
- 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
- 从余下的 N - 1 个元素中,找出关键字最小的元素,重复1、2步,直到排序结束。
JAVA代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
public class SelectionSort {
public static void main(String[] args) {
int[] arr = {49, 38, 65, 97, 76, 13, 27, 49, 55, 4}; System.out.println("排序前:"+Arrays.toString(arr));
selectSort1(Arrays.copyOf(arr,arr.length)); }
private static void selectSort1(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int min = i; for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[min]) { min = j; } } if (min!=i){ int temp = arr[min]; arr[min] = arr[i]; arr[i]=temp; } }
System.out.println("排序后:"+Arrays.toString(arr)); }
}
|
复杂度
平均时间复杂度 |
最好情况 |
最坏情况 |
空间复杂度 |
O(n²) |
O(n²) |
O(n²) |
O(1) |
选择排序的简单和直观名副其实,这也造就了它”出了名的慢性子”,
无论是哪种情况,哪怕原数组已排序完成,它也将花费将近n²/2次遍历来确认一遍。
即便是这样,它的排序结果也还是不稳定的。 唯一值得高兴的是,它并不耗费额外的内存空间。
适应场景
当数据量不大,且对稳定性没有要求的时候,适用于选择排序。