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

    直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:

    第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,

    第二次从R{1}~R[n-1]中选取最小值,与R[1]交换,....,

    第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,

    第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,

    总共通过n-1次,得到一个按排序码从小到大排列的有序序列.

    public static void SelectionSort(int[] sortNum)
    {
    int temp = 0; int baseNum = 0; //第一层循环一共进行了n-1遍历 for (var i = 0; i < sortNum.Length - 1; i++) { //设定一下基准值,每次遍历开始都设置为第一个 //例如:第一次遍历基准为sortNum[0],第二次为sortNum[1] ... baseNum = sortNum[i]; //第二层循环,遍历每一项从中找到最小的,放在最前面 for (var j = i; j < sortNum.Length - 1; j++) { //如果基准值大于该项,就进行交换 if (baseNum > sortNum[j + 1]) { //交换大小值 temp = sortNum[j + 1]; sortNum[j + 1] = sortNum[i]; sortNum[i] = temp; //重新设定基准值为小值 baseNum = temp; } } } }

     别人的实现,上面的是通过直接记录最小值,也可以通过记录下标的方式

     static List<int> SelectionSort(List<int> list)
     {
        //要遍历的次数
        for (int i = 0; i < list.Count - 1; i++)
        {
            //假设tempIndex的下标的值最小
            int tempIndex = i;
    
            for (int j = i + 1; j < list.Count; j++)
            {
                //如果tempIndex下标的值大于j下标的值,则记录较小值下标j
                if (list[tempIndex] > list[j])
                    tempIndex = j;
            }
    
            //最后将假想最小值跟真的最小值进行交换
            var tempData = list[tempIndex];
            list[tempIndex] = list[i];
            list[i] = tempData;
         }
          return list;
     }
  • 相关阅读:
    此查询使用的不是 ANSI 外部联接运算符
    centos重启命令
    updatePanel 加载完成后回调JS
    建站推荐十个免费的CMS内容管理系统(Php+mysql)
    [转]最值得拥有的免费Bootstrap后台管理模板
    Got a packet bigger than 'max_allowed_packet' bytes”
    ECshop商城程序常见的96个小问题汇总
    linux 命令
    mysql 存储过程
    千万级记录的Discuz论坛导致MySQL CPU 100%的优化笔记
  • 原文地址:https://www.cnblogs.com/dcz2015/p/5278609.html
Copyright © 2011-2022 走看看