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

    一。概念

    每一趟在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)。

         所以是平方阶。

  • 相关阅读:
    边框的作用之产生相对margin
    css3 实现切换显示隐藏效果
    Vue 获取数据、事件对象、todolist
    Vue 双向数据绑定、事件介绍以及ref获取dom节点
    Vue 目录结构分析 数据绑定 绑定属性 循环渲染数据 数据渲染
    Vue 安装环境创建项目
    进程&线程
    生成Excel
    JQuery input file 上传图片
    0908期 HTML 样式表属性
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3832182.html
Copyright © 2011-2022 走看看