Fork me on GitHub

基础算法之选择排序Selection Sort

原理

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。一种简单直观的排序算法。

例子

将数组[3,6,4,2,5,1]进行从大到小排序

排序步骤:

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

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

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

第二趟找到剩余[6,4,2,5,3]数字里的最小数2,与当前数组的首位数字进行交换

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

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

第三趟找到剩余[4,6,5,3]数字里的最小数3,与当前数组的首位数字进行交换

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

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

第四趟找到剩余[6,5,4]数字里的最小数4,与当前数组的首位数字进行交换

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

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

第五趟找到剩余[5,6]数字里的最小数5,本来就在首位,无须交换

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

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

至此,排序完毕,输出最终结果1 2 3 4 5 6

动画演示

代码参考

复制代码
        static void Main(string[] args)
        {
            int[] intArray = { 3, 6, 4, 2, 5, 1 };
            Selection_Sort(intArray);

            foreach (var item in intArray)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }

        static void Selection_Sort(int[] unsorted)
        {
            int min, temp;
            for (int i = 0; i < unsorted.Length - 1; i++)
            {
                min = i;

                // 取得当前数组最小值的位置
                for (int j = i + 1; j < unsorted.Length; j++)
                {
                    if (unsorted[min] > unsorted[j])
                    {
                        min = j;
                    }
                }

                if (min != i)
                {
                    temp = unsorted[i];
                    unsorted[i] = unsorted[min];
                    unsorted[min] = temp;
                }
            }
        }
复制代码

参考资料

维基百科http://en.wikipedia.org/wiki/Selection_sort

posted @   Jackbase  阅读(768)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示