标签:pre 图片 依次 选择排序 system alt 时间复杂度 creat 算法
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。

O(n2) 的时间复杂度
import java.util.Arrays;
/**
* Created with IntelliJ IDEA.
* User: Andrew
* Date: 2021/02/10
* Time: 19:49
* Description: No Description
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = new int[]{3,4,5,7,1,2,0,3,6,8};
// 排序前数组
System.out.println(Arrays.toString(arr));
selectSort(arr);
// 排序后的数组
System.out.println(Arrays.toString(arr));
}
public static void selectSort(int[] arr){
// 遍历所有的数
for (int i = 0; i < arr.length; i++) {
int minIndex=i;
// 把当前遍历的数和后面所有的数依次进行比较,并把记录最小的数的下标
for (int j = i + 1; j < arr.length; j++) {
// 如果后面比较的数比记录的最小的数小
if (arr[minIndex] > arr[j]){
// 记录最小的那个数的下标
minIndex = j;
}
}
// 如果最小的数和当前遍历的下标不一致,说明下标为minIndex的数比当前遍历的数更小
if (i != minIndex){
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
}
/**
* Created with IntelliJ IDEA.
* User: Andrew
* Date: 2021/02/10
* Time: 19:59
* Description: No Description
*/
/**
* 选择排序:
* 本质:
* 1. 首先选择第 1 个数为最小的数, 然后让这个数和后面所有的数比较,
* 2、一轮下来找到最小的数, 然后把最小的放在第 1 个位置
* 3、再选择第 2 个数为第 2 小的数, 再后面逐次比较,.......
*/
object SelectSortDemo {
def swap(array: Array[Int],index1:Int,index2:Int): Unit ={
val temp = array(index1)
array(index1) = array(index2)
array(index2) = temp
}
def main(args: Array[String]): Unit = {
val array = Array(5, 7, 2, 9, 4, 1, 0, 5, 7)
println(array.toBuffer)
selectSortDemo(array)
println(array.toBuffer)
}
def selectSortDemo(arr: Array[Int]): Unit = {
// 一共 len 个元素, 只需要找到 len-1 个就可以了, 剩下一个位置自动正确
for (i <- 0 until arr.length - 1) {
// 选中第 i 个元素为第 i 小(只记录索引即可, 成功之后交换一次元素即可)
var minIndex: Int = i
// 让第 i 个元素, 逐次与 i + 1 位置元素比较
for (j <- i + 1 until arr.length) {
// 如果有比 minIndex 的位置更小的元素, 就记录下新的索引
if (arr(j) < arr(minIndex)) minIndex = j;
//把 i 位置和 minIndex 位置的元素交换
if (i != minIndex) {
swap(arr,i,minIndex)
}
}
}
}
}
标签:pre 图片 依次 选择排序 system alt 时间复杂度 creat 算法
原文地址:https://www.cnblogs.com/andrew037/p/14396546.html