C# 排序算法2:选择排序

选择排序法 ,是在要排序的一组数中,选出最小(或最大)的一个数与第一个位置的数交换;在剩下的数当中找最小的与第二个位置的数交换,即顺序放在已排好序的数列的最后,如此循环,直到全部数据元素排完为止。


原理:1. 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,

           2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

           3. .以此类推,直到全部待排序的数据元素排完。

 /// <summary>
        /// 选择排序
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        static int[] SelectSort(int[] arr)
        {
            for (int i = 0; i < arr.Length ; i++)// 4.继续遍历,将最小数,放入第二个,第三个...第n个位置
            {
                int minValueIndex = i; //最小值的下标位置,初始设为第一个位置
                for (int j = i+1; j < arr.Length; j++)// 2. 比较遍历后,找出这些待排序数据中最小值的下标位置
                {
                    if (arr[j] < arr[minValueIndex])//1. 比较两元素,将较小值的下标位置赋值给 minValueIndex
                    {
                        minValueIndex = j;
                    }
                }
                //3. 将选出的最小元素,与第一个位置的元素,进行交换(即选出了最小的一个数,放入了第一个位置)
                var temp = arr[i];  
                arr[i] = arr[minValueIndex]; 
                arr[minValueIndex] = temp;
            }

            return arr;
        }

排序结果

  static void Main(string[] args)
        {
            Console.WriteLine($"数据算法");
            var arr1=  GetArrayData(8, 1, 22);
            Console.WriteLine($"生成未排序数据:{ShowArray(arr1)}");
            var arr2 = BubbleSort(arr1);
            Console.WriteLine($"冒泡排序:{ShowArray(arr2)}");
            var arr3= SelectSort(arr1);
            Console.WriteLine($"选择排序:{ShowArray(arr3)}");
            Console.ReadLine();
        }

原文地址:https://www.cnblogs.com/for-easy-fast/p/14032537.html