标签: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