ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#数据结构与算法系列(十九):选择排序算法(SelectSort)

2020-06-26 16:01:44  阅读:305  来源: 互联网

标签:minIndex arr SelectSort C# 最小值 minValue int 算法 排序


1.介绍

选择排序算法属于内部排序算法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置达到排序的目的

时间复杂度:O(n^2) 双层for

2.思想

选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0]~arr[n-1]中选取最小值,

与arr[0]交换,第二次从arr[1]~arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]~arr[n-1]中选取最小值,与arr[2]交换,…,

第i次从arr[i-1]~arr[n-1]中选取最小值,与arr[i-1]交换,…, 第n-1次从arr[n-2]~arr[n-1]中选取最小值,与arr[n-2]交换,

总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

3.思路分析图

 

 

 

4.代码实现

namespace DataStructure
{
    public class SelectSort
    {
        /// <summary>
        /// 测试
        /// </summary>
        public static void Test()
        {
            int[] arr = { 101, 34, 119, 1 };

            System.Console.WriteLine("排序的数组:" + ArrayToString(arr));

            System.Console.WriteLine("\n优化后的数组排序");

            Sort(arr);

            System.Console.WriteLine("\n优化前的数组排序");

            arr = new int[] { 101, 34, 119, 1 };

            {
                int minIndex = 0;

                int minValue = arr[minIndex];

                for (int i = 1; i < arr.Length; i++)
                {
                    if (minValue > arr[i])
                    {
                        minIndex = i;

                        minValue = arr[i];
                    }
                }
                if (minIndex != 0)
                {

                    arr[minIndex] = arr[0];

                    arr[0] = minValue;

                }

                System.Console.WriteLine("\n第一次排序后的结果:" + ArrayToString(arr));
            }
            {
                int minIndex = 1;

                int minValue = arr[minIndex];

                for (int i = 1 + 1; i < arr.Length; i++)
                {
                    if (minValue > arr[i])
                    {
                        minIndex = i;

                        minValue = arr[i];
                    }
                }
                if (minIndex != 1)
                {

                    arr[minIndex] = arr[1];

                    arr[1] = minValue;

                }

                System.Console.WriteLine("\n第二次排序后的结果:" + ArrayToString(arr));
            }
            {
                int minIndex = 2;

                int minValue = arr[minIndex];

                for (int i = 1 + 2; i < arr.Length; i++)
                {
                    if (minValue > arr[i])
                    {
                        minIndex = i;

                        minValue = arr[i];
                    }
                }
                if (minIndex != 2)
                {

                    arr[minIndex] = arr[2];

                    arr[2] = minValue;

                }

                System.Console.WriteLine("\n第三次排序后的结果:" + ArrayToString(arr));
            }
        }

        /// <summary>
        /// 将数组转换成String
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        public static string ArrayToString(int[] arr)
        {

            string result = "";

            for (int i = 0; i < arr.Length; i++)
            {
                result += arr[i] + ",";
            }

            return result;
        }

        /// <summary>
        /// 选择排序算法封装
        /// </summary>
        /// <param name="arr"></param>
        private static void Sort(int[] arr)
        {
            //要循环几次
            for (int i = 0; i < arr.Length - 1; i++)
            {
                //假定最小值索引
                int minIndex = i;

                //假定最小值
                int minValue = arr[minIndex];

                for (int j = i + 1; j < arr.Length; j++)
                {
                    //说明假定的最小值不是最小
                    if (minValue > arr[j]) 
                    {
                        //重置最小值索引
                        minIndex = j;

                        //重置最小值
                        minValue = arr[j];
                    }
                }

                //如果最小值索引不是等于当前索引,即交换
                if (minIndex != i)
                {
                    //将原本最小值索引的值,交换成当前索引的值
                    arr[minIndex] = arr[i];

                    //将当前索引的值交换成最小值
                    arr[i] = minValue;
                }

                System.Console.WriteLine($"\n第{i + 1}次排序的结果:{ArrayToString(arr)}");
            }
        }
    }
}

5.效果演示图

 

标签:minIndex,arr,SelectSort,C#,最小值,minValue,int,算法,排序
来源: https://www.cnblogs.com/vic-tory/p/13195263.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有