C#实现选择排序

 更新时间:2022年08月13日 15:42:20   作者:Darren Ji  
这篇文章介绍了C#实现选择排序的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

选择排序是一种低效的排序算法,大致过程是:遍历数组的每一个元素,先假设0号位置上的元素是最小的,并把0号索引赋值给一个表示最小元素索引的变量,比如说是smallest,再遍历0号位置以后的元素,一旦发现有比0号位置元素更小的元素,就把该元素的索引赋值给smallest,继续遍历,最终把0号位置以后最小元素的索引赋值给了smallest变量,再把0号位置和smallest位置上的元素互换,这样,在0号位置上放上了最小元素。接着,在1号位置放上倒数第二小的元素,在2号位置放上倒数第三小的元素......以此类推,最终得到一个升序排列的数组。由于是依次循环遍历数组元素,个人更愿意把选择排序理解成线性排序。

自定义一个类,里面维护着一个int[]类型数组,通过构造函数定义数组长度并初始化,并提供了打印和选择排序的相关方法。

   public class MyArray
    {
        private static int[] arr;
        private static Random r = new Random();
        public MyArray(int size)
        {
            arr = new int[size];
            for (int i = 0; i < size; i++)
            {
                arr[i] = r.Next(1, 100);
            }
        }
        //选择排序算法
        public void Sort()
        {
            int smallest; //最小元素的索引 
            //最后一个索引位置不需要遍历,因为在代码段的内部循环中包含了对最后一个索引位置的处理
            for (int i = 0; i < arr.Length - 1; i++)
            {
                //把当前遍历的元素的索引赋值给smallest,即假设当前遍历的数组元素为最小元素
                smallest = i;
                //遍历当前遍历元素后面的所有元素
                //获取最小元素的索引
                for (int index = i + 1; index < arr.Length; index++)
                {
                    if (arr[index] < arr[smallest])
                    {
                        smallest = index;
                    }
                }
                //把当前遍历元素和最小元素交换位置
                Swap(i, smallest);
                //每次排完序打印
                Print();
            }
        }
        //交换2个位置上的元素
        public void Swap(int first, int second)
        {
            int temp = arr[first];
            arr[first] = arr[second];
            arr[second] = temp;
        }
        //打印数组元素
        public void Print()
        {
            foreach (var item in arr)
            {
                Console.Write(item + " ");               
            }
            Console.WriteLine("\n");
        }
    }

客户端调用。

    class Program
    {
        static void Main(string[] args)
        {
            MyArray myArray = new MyArray(8);
            Console.Write("排序前: ");
            myArray.Print();
            Console.WriteLine("排序后: ");
            myArray.Sort();
            Console.ReadKey();
        }
    }

可见,对选择排序来说,外部循环进行了n-1次迭代,内部循环第一次进行了n-1迭代,第二次进行了n-2次迭代……以时间复杂度来说,忽略小项和常数项,选择排序基本上是一个平方阶,写成O(n²)。

到此这篇关于C#实现选择排序的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#导出生成excel文件的方法小结(xml,html方式)

    C#导出生成excel文件的方法小结(xml,html方式)

    C#导出生成excel文件的方法小结(xml,html方式)。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • C#实现计算器功能(winform版)

    C#实现计算器功能(winform版)

    这篇文章主要为大家详细介绍了C#实现winform版的计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C#使用GZipStream实现文件的压缩与解压

    C#使用GZipStream实现文件的压缩与解压

    这篇文章主要为大家详细介绍了C#使用GZipStream实现文件的压缩与解压,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • c#制作类似qq安装程序一样的单文件程序安装包

    c#制作类似qq安装程序一样的单文件程序安装包

    c#制作单文件安装程序,可安装windows服务,类似安装QQ,大家参考使用吧
    2014-01-01
  • C#编程实现动态改变配置文件信息的方法

    C#编程实现动态改变配置文件信息的方法

    这篇文章主要介绍了C#编程实现动态改变配置文件信息的方法,涉及C#针对xml格式文件的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • c# 进程内部的同步

    c# 进程内部的同步

    这篇文章主要介绍了c# 进程内部的同步,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下
    2020-10-10
  • C#对集合进行排序

    C#对集合进行排序

    这篇文章介绍了C#对集合进行排序的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • C#实现会移动的文字效果

    C#实现会移动的文字效果

    这篇文章主要为大家详细介绍了C#实现会移动的文字效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • C#实现远程关闭计算机或重启计算机的方法

    C#实现远程关闭计算机或重启计算机的方法

    这篇文章主要介绍了C#实现远程关闭计算机或重启计算机的方法,涉及C#远程连接及系统命令的调用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#构造函数详解

    C#构造函数详解

    本文详细讲解了C#中的构造函数,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04

最新评论