• 经典排序算法 选择排序Selection sort


    经典排序算法 - 选择排序Selection sort

    顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来,

    顺序放入新数组,直到全部拿完

    再简单点,对着一群数组说,你们谁最小出列,站到最后边

    然后继续对剩余的无序数组说,你们谁最小出列,站到最后边

    再继续刚才的操作,一直到最后一个,继续站到最后边,现在数组有序了,从小到大

    举例

    先说看每步的状态变化,后边介绍细节,现有无序数组[6 2 4 1 5 9]

    第一趟找到最小数1,放到最前边(与首位数字交换)

    交换前:| 6 | 2 | 4 | 1 | 5 | 9 |

    交换后:| 1 | 2 | 4 | 6 | 5 | 9 |

    第二趟找到余下数字[2 4 6 5 9]里的最小数2,与当前数组的首位数字进行交换,实际没有交换,本来就在首位

    交换前:| 1 | 2 | 4 | 6 | 5 | 9 |

    交换后:| 1 | 2 | 4 | 6 | 5 | 9 |


    第三趟继续找到剩余[4 6 5 9]数字里的最小数4,实际没有交换,4待首位置无须交换

    第四趟从剩余的[6 5 9]里找到最小数5,与首位数字6交换位置

    交换前:| 1 | 2 | 4 | 6 | 5 | 9 |

    交换后:| 1 | 2 | 4 | 5 | 6 | 9 |

    第五趟从剩余的[6 9]里找到最小数6,发现它待在正确的位置,没有交换

    排序完毕输出正确结果[1 2 4 5 6 9]

    第一趟找到最小数1的细节

    当前数组是| 6 | 2 | 4 | 1 | 5 | 9 |

    先把6取出来,让它扮演最小数

    当前最小数6与其它数一一进行比较,发现更小数就交换角色

    当前最小数6与2比较,发现更小数,交换角色,此时最小数是2,接下来2与剩余数字比较

    当前最小数2与4比较,不动

    当前最小数2与1比较,发现更小数,交换角色,此时最小数是1,接下来1与剩余数字比较

    当前最小数1与5比较,不动

    当前最小数1与9比较,不动,到达末尾

    当前最小数1与当前首位数字进行位置交换,如下所示

    交换前:| 6 | 2 | 4 | 1 | 5 | 9 |

    交换后:| 1 | 2 | 4 | 6 | 5 | 9 |

    完成一趟排序,其余步骤类似

    代码仅供参考

            static void selection_sort(int[] unsorted)
            {
                for (int i = 0; i < unsorted.Length; i++)
                {
                    int min = unsorted[i], min_index = i;
                    for (int j = i; j < unsorted.Length; j++)
                    {
                        if (unsorted[j] < min)
                        {
                            min = unsorted[j];
                            min_index = j;
                        }
                    }
                    if (min_index != i)
                    {
                        int temp = unsorted[i];
                        unsorted[i] = unsorted[min_index];
                        unsorted[min_index] = temp;
                    }
                }
            }
    
            static void Main(string[] args)
            {
                int[] x = { 6, 2, 4, 1, 5, 9 };
                selection_sort(x);
                foreach (var item in x)
                {
                    Console.WriteLine(item);
                }
                Console.ReadLine();
            }

    返回主目录 [经典排序算法][集锦]



    ------------------------------------------
    除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
    BUY ME COFFEE
  • 相关阅读:
    Spring事务管理学习笔记
    写给初学前端工程师的一封信
    angularjs 自定义指令弹窗
    ng-if和ng-show的区别
    前端遇到的一些坑
    浏览器样式兼容总结
    百分比控制表格列宽,不起效
    ng-model 将时间戳转换为标准时间
    使用git和sourcetree提交代码的一些问题
    本地运行angularjs应用,提示出现跨域问题
  • 原文地址:https://www.cnblogs.com/kkun/p/selection_sort.html
Copyright © 2020-2023  润新知