• C#实现——十大排序算法之选择排序


    选择排序法

    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 + "	");
            }
            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循环结束后并不能为下一次的循环提供有效信息。这种性质在某些时候是一种缺陷。在数组大小相同时,当一个几乎已经有序的数组使用选择排序法花费的时间和无序数组所花费的时间是一致的。

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

  • 相关阅读:
    开悟人智慧一生,要学会忍辱才能精进!
    唯美MACD-完全版
    资本的力量 趋势的力量 规律的力量
    大趋势和小趋势的辩证关系(一)
    120日均线金叉250日均线是大牛市来临的重要信号
    趋势停顿与转折(三)
    趋势停顿与转折(二)
    趋势停顿与转折(一)
    MACD技术的高级应用--MACD与波浪
    SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)
  • 原文地址:https://www.cnblogs.com/huilixieqi/p/13793585.html
Copyright © 2020-2023  润新知