算法系列02----选择排序

选择排序法

1.工作原理(算法思路)

  1. 给定一个待排序数组,找到数组中最小的那个元素
  2. 如果最小元素不是待排序数组的第一个元素,则将其和第一个元素互换
  3. 在剩下的元素中,重复1、2过程,直到排序完成。

2.动图演示

选择排序法  动图

3.C#代码实现

根据原理设计算法:

  class Program
{
    
    //选择排序法
    private static void chooseSort(int[] array)
    {
        //第一个for循环:每一次循环完成后得到的当前的最大元素都与第i位做交换
        for (int i = 0; i < array.Length; i++)
        {
            //min为最小元素的索引
            int min = i;

            //第二个for循环:将当前的array[j]与array[min]作比较,如果array[j]更小,则替换min的当前索引
            for (int j = i + 1; j < array.Length; j++)
            {
                if (array[min] > array[j])
                {
                    min = j;
                }
            }
            //当第二个for循环完成时,array[min]中存储的就是当前最小元素
            //将array[min]与array[i]交换
            int temp = array[i];
            array[i] = array[min];
            array[min] = temp;
        }
    }

    //打印输出数组
    private static void printArray(int[] array)
    {
        foreach (int item in array)
        {
            Console.Write(item + "\t");
        }
        Console.WriteLine();
    }

    static void Main(string[] args)
    {
        int[] array = new int[10] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
        printArray(array);
        chooseSort(array);
        printArray(array);
        Console.ReadKey();

    }

}
折叠

输出结果
选择排序法结果

4.性能分析

1)复杂度

选择排序法复杂度

2)选择排序法特点

  • 执行的比较和交换次数
    比较: N*(N-1)/2
    交换: N

  • 运行时间与输入无关
    在每一次的for循环结束后并不能为下一次的循环提供有效信息。这种性质在某些时候是一种缺陷。在数组大小相同时,当一个几乎已经有序的数组使用选择排序法花费的时间和无序数组所花费的时间是一致的。

  • 数据的移动量最少
    交换的次数和数组的大小呈线性关系,其他的排序算法对数据移动量都是线性对数级别或平方级别的。

posted @   爱生活,爱代码  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2017-07-26 模态窗口提交后又打开一个新的窗口的解决方案
点击右上角即可分享
微信分享提示