前言
下面介绍选择排序中的简单选择排序, 选择排序还有树形选择排序和堆排序
其中堆排序在往期已有介绍 , 这里是传送门
提示:以下是本篇文章正文内容,下面案例可供参考
一、简单选择排序的思路
1.基本思想
选择排序的基本思想是 : 在待排序的目标中不断的遍历,选出在指定范围内最小的元素 , 将其放到序列的最 前/后处 (前/后由给定的升降序决定)
2.步骤
1.设待排序列为arr[0~n] , 从arr[0]开始, 先假设arr[0]为关键词最小元素,记作min , 索引0记作index
2.从arr[0]开始,循环向后,将min逐个元素比较,若有元素小于min,则将min和index分别置为该元素的值,索引
3.按指定的升降序将min与序列的最前/后元素交换
4.从arr[1]开始,再次逐个比较, 其余元素以此类推,最后得到排序结果
二、代码
1.代码实现
public static void selectSort(int[] arr){
for(int i = 0 ; i < arr.length ; i++){
int minIndex = i;
int min = arr[i];
for(int j = i + 1 ; j < arr.length ; j++){
if(min > arr[j]){
min = arr[j];
minIndex = j;
}
}
if(minIndex != i){
arr[minIndex] = arr[i];
arr[i] = min;
}
}
System.out.println(Arrays.toString(arr));
}
2.算法分析
时间复杂度 : 关键词间的比较次数为KCN=n(n-1)/2
(第一轮为n-1次比较,第二轮为n-2次比较,以此类推并求和得到结果) , 因此时间复杂度为O(n^2)
空间复杂度 : 没有使用到其它的辅助数据结构,只有记录最小值及其索引的两个变量,因此空间复杂度为O(1)
较大规模数据排序时间 : 8w个数据在我电脑上约为2秒种