zoukankan      html  css  js  c++  java
  • 选择排序

    一种内部排序,选出某个元素,按照规则交换

    基本思想:
    第一次:遍历数组,找到最小值后,与arr[0]交换
    第二次:从arr[1] - arr[n-1]中选择最小的,与arr[1]交换。
    .
    .
    .
    .
    第i次:从arr[i-1]-arr[n-1]中选择最小值,与arr[i-1]交换


    实例:原始的数组:101, 34, 119, 1
    第一轮排序:1,34,119,101
    第二轮排序:1,34,119,101
    第三轮排序:1,34,101,119
    说明:
    1)选择排序一个有数组大小-1轮排序
    2)每一轮排序,又是一个有规则的循环
    2.1)先假定当前这个数是最小的,
    2.2)然后和后面每个数进行比较,如果发现有比它更小的,就重新确定最小数,并得到下标
    2.3)当遍历到数组的最后时,就得到本轮最小数和小标
    2.4)交换

    代码:

     1 // 选择排序 时间复杂度为O(n^2),,嵌套for循环
     2     public  static void selectSort(int[] arr) {
     3 
     4         // 使用逐步推导的方式
     5         // 第一轮
     6         // 原始的数组:101, 34, 119, 1
     7         // 第一轮排序:1,34,119,101
     8         for (int i = 0; i < arr.length - 1; i++) {
     9             int minIndex = i;
    10             int min = arr[i];
    11             for (int j = i + 1; j < arr.length; j++) {
    12                 if (min > arr[j]) { // 说明假定的最小值不是最小
    13                     min = arr[j]; // 重置min
    14                     minIndex = j; // 重置minIndex
    15                 }
    16             }
    17             // 将最小值,放在arr[0],即交换
    18             if (minIndex != i) { // 优化部分
    19                 arr[minIndex] = arr[i];
    20                 arr[i] = min;
    21             }
    22             System.out.println("第"+(i + 1)+"轮后");
    23             System.out.println(Arrays.toString(arr));
    24         }
    25 
    26 
    27 
    28 //        // 第二轮排序:1,34,119,101
    29 //         minIndex = 1;
    30 //         min = arr[1];
    31 //        for(int j = 1 + 1; j < arr.length; j++) {
    32 //            if(min > arr[j]) { // 说明假定的最小值不是最小
    33 //                min = arr[j]; // 重置min
    34 //                minIndex = j; // 重置minIndex
    35 //            }
    36 //        }
    37 //        // 将最小值,放在arr[0],即交换
    38 //        if(minIndex != 1) {
    39 //            arr[minIndex] = arr[1];
    40 //            arr[1] = min;
    41 //        }
    42 //
    43 //        System.out.println("第2轮后");
    44 //        System.out.println(Arrays.toString(arr));
    45 //
    46 //
    47 //
    48 //        // 第三轮排序:1,34,101,119
    49 //        minIndex = 2;
    50 //        min = arr[2];
    51 //        for(int j = 2 + 1; j < arr.length; j++) {
    52 //            if(min > arr[j]) { // 说明假定的最小值不是最小
    53 //                min = arr[j]; // 重置min
    54 //                minIndex = j; // 重置minIndex
    55 //            }
    56 //        }
    57 //        // 将最小值,放在arr[0],即交换
    58 //        if(minIndex != 2) {
    59 //            arr[minIndex] = arr[2];
    60 //            arr[2] = min;
    61 //        }
    62 //        System.out.println("第3轮后");
    63 //        System.out.println(Arrays.toString(arr));
    64 //
    65 
    66     }
  • 相关阅读:
    linux命令整理
    各种提权姿势总结
    常用端口信息说明和利用
    近年来爆发的CVE漏洞编号
    一个优秀的SSH远程终端工具
    python-读写文件的方式
    kali安装ssh服务
    一套实用的渗透测试岗位面试题
    使用 python快速搭建http服务
    asciinema使用
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14377203.html
Copyright © 2011-2022 走看看