• 算法分析:什么是选择排序


    2011年,C语言老师给我们讲选择排序。

    ....

    我一直很忙,很忙。但是却不知道在忙些什么?

    似乎甚至几年的时间都没有接触选择排序。

    2019年春节,一次偶然的某一个晚上,再一次看了一次选择排序的过程。

    什么是选择排序呢?

    选择排序是通过在无序区域内查找最小(或者最大)的元素。并且把这个元素放在数列的起始位置。那么这个元素已经是构成一个有序区域。接下来只要把剩下的无序区域内的元素继续找出最小(或者最大)的元素。同样放置在有序区域的尾巴...依次类推,直到所有的元素全部进入有序区域内。

    我想通过一组数据来阐述选择排序的过程。

    • 第一轮排序开始。此时所有元素处于无序区域。在无序区域中找出最小的[元素1] 。并且把[元素1] 与无序区域内的第一个元素交换。[元素1] 即被加入到有序区域。

    • 第二轮排序开始。在无序区域所有元素中找出最小的[元素2],并且把[元素2]与无序区域内的第一个元素交换。[元素2]即被加入到有序区域。

    • 第三轮排序开始。在无序区域所有元素中找出最小的[元素3],由于[元素3]就是无序区域的第一个元素,因此不交换。[元素3]加入到有序区域。

       ....

    以此类推,重复以上的过程,直到第7轮排序结束之后,此时在有序区域内的元素有8个,元素总个数有7个,最后一个自然成为有序区域的元素。

    • 每经过一轮排序,有序区域内的元素数量增加1个。
    • 如果待排序的元素个数为N。需要经历N-1轮排序。

    最后我们使用Java代码来展示上述的算法。

     1 private static void sort() {
     2 
     3         Integer[] data = {6,3,2,1,8,9,7,5};
     4 
     5 
     6         for(int i=0; i<data.length-1; i++) {
     7 
     8             int k = i;
     9 
    10             for(int j=k; j<data.length; j++) {
    11                 if(data[j] < data[k]) {
    12                     k = j;
    13                 }
    14             }
    15 
    16             if(i != k) {
    17                 int x = data[i];
    18                 data[i] = data[k];
    19                 data[k] = x;
    20             }
    21 
    22         }
    23 
    24     }

     

    从上述代码和流程图中。大致步骤如下:

    • 大循环控制轮数,循环的轮数等于元素的个数-1。
    • 每一轮,找出无序区域的最小元素,并且把这个最小元素和无序区域的第一个元素交换。
  • 相关阅读:
    线性变换 矩阵
    【安全】安全测试基本切入点
    【产品】汉语言基础对产品经理的重要性
    【Selenium】自动化调试后C盘越来越大
    【记录】让人淡疼的BUG之参数传送错误
    【转载】Java 升级到jdk7后DbVisualizer 6 启动空指针的处理方案
    cocoapods 报错
    mac 版 Pycharm 激活
    Foxmail添加gmail密码错误
    Apple 相关官方地址
  • 原文地址:https://www.cnblogs.com/behindyou/p/10573972.html
Copyright © 2020-2023  润新知