首页 > 代码库 > C#选择排序详解

C#选择排序详解

 选择排序图解

                       

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

C#代码实现

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 选择排序{    //选择排序与冒泡排序比较的次数是一样的    //选择排序的交换次数要比冒泡排序的交换次数少    class Program    {        static void Main(string[] args)        {            int[] arr = { 15, 0, 10, 50, 55, 35, 15, 20 }; //待排序数组            SelectSort(arr);   //调用选择排序函数              }        private static void SelectSort(int[] arr)        {             int temp = 0;            for (int i = 0; i < arr.Length - 1; i++)            {                int minVal = arr[i]; //假设 i 下标就是最小的数                int minIndex = i;  //记录我认为最小的数的下标                for (int j = i + 1; j < arr.Length; j++)   //这里只是找出这一趟最小的数值并记录下它的下标                {                    //说明我们认为的最小值,不是最小                    if (minVal > arr[j])    //这里大于号是升序(大于是找出最小值) 小于是降序(小于是找出最大值)                    {                        minVal = arr[j];  //更新这趟最小(或最大)的值 (上面要拿这个数来跟后面的数继续做比较)                        minIndex = j;    //记下它的下标                    }                }                //最后把最小的数与第一的位置交换                temp = arr[i];    //把第一个原先认为是最小值的数,临时保存起来                arr[i] = arr[minIndex];   //把最终我们找到的最小值赋给这一趟的比较的第一个位置                arr[minIndex] = temp;  //把原先保存好临时数值放回这个数组的空地方,  保证数组的完整性            }            //控制台输出            foreach (int item in arr)            {                Console.WriteLine("C#遍历:{0}", item);            }        }    }}

 

C#选择排序详解