• 选择排序


    一。概念

    每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。

    二。示例

    初始序列:               49 27 65 97 76 12 38 }

    第1趟:12与49交换:12 { 27 65 97 76 49 38 }

    第2趟:27不动 :    12 27 { 65 97 76 49 38 }

    第3趟:65与38交换:12 27 38 { 97 76 49 65 }

    第4趟:97与49交换:12 27 38 49 { 76 97 65 }

    第5趟:65与76交换:12 27 38 49 65 { 97 76 }

    第6趟:97与76交换:12 27 38 49 65 76 97 

     

    三。代码

    简单选择排序的算法具体描述如下:
        static void SelectSort(int r[]){ //对数组r做简单选择排序
    
            int i, j;
            for ( i = 0 ; i < r.length; i++) {             
                int index = i ;                                 //第i+1趟,从i+1位置开始查找
                for ( j = i+1 ; j < r.length ; j++){     //查找到最后一位
                    if (r[j] < r[index] ){                      //查找最小记录的位置
                          index = j;                             //index 用来保存查找到的最小记录的位置
                    } 
                } 
          
               if ( index != i) {
                  int temp = r[i];
                   r[i]= r[index];  //把最小的放在i位置
                   r[index] = temp; 
               }
           } 
       } 

    四。分析 

      在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。

    最坏情况下,需要移动记录的次数最多为3(n-1)(此情况中待排序记录并非完全逆序,给完全逆序记录排序的移动次数应为(n/2)*3,其中n/2向下取整)。

      单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;

    依次类推,共需要进行的比较次数是∑ =(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n2)。

         所以是平方阶。

  • 相关阅读:
    Mysql根据字段汉字首字母排序
    Springboot学习—CommandLineRunner接口(转载)
    JavaWeb—Nginx介绍(转载)
    linux下后台启动springboot项目(转载)
    Springboot入门5-项目打包部署(转载)
    Linux学习—redis安装配置及远程连接
    Linux学习—maven安装
    Linux学习—mysql安装配置及远程连接
    Linux学习—yum命令(转载)
    Linux学习—rpm包管理
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3832182.html
Copyright © 2020-2023  润新知