【排序算法】直接选择排序
1 前言
今天把排序的几个算法过一下,这节我们看一下直接选择排序,简单的来说就是默认某个位置为最小然后从位置后的元素逐个比较进行交换,我们看示例。
2 代码示例
/** * 直接选择排序 * 直接选择相当于直接把第 i 个看作是最大或者最小,然后依次跟后边的每个元素进行比较,比我小的就跟我交换一下 * 假设待排序的数量为:n * 要考虑的是: * 1、还是需要 n-1 轮 * 2、因为首先我们要从第一个(也就是索引为 0) 的开始,那么外层循环就是 0 -> n-1 * 内层循环就从 外层索引+1的位置开始到最后一个 */ public static void selectSort(int[] arr) { // 外层循环既是直接选择的索引位置 也是要进行的轮数 for (int i = 0; i < arr.length - 1; i++) { // 内层循环从外层索引 + 1 的位置开始到最后一个 for (int j = i+1; j < arr.length; j++) { // 升序,比我小的就跟我换位置 if (arr[j] < arr[i]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } public static void main(String[] args) { int[] arr = IntStream.generate(() -> ThreadLocalRandom.current().nextInt(10000)).limit(10000).toArray(); System.out.println("排序前:" + Arrays.stream(arr).mapToObj(String::valueOf).collect(Collectors.joining(","))); selectSort(arr); System.out.println("排序后:" + Arrays.stream(arr).mapToObj(String::valueOf).collect(Collectors.joining(","))); }
3 小结
有写的不对的地方,欢迎指正哈。