1.算法描述

在一个长度为 N 的无序数组中,第一次遍历 n-1 个数找到最小的和第一个数交换。

第二次从下一个数开始遍历 n-2 个数,找到最小的数和第二个数交换。

重复以上操作直到第 n-1 次遍历最小的数和第 n-1 个数交换,排序完成。

 数据结构之选择排序_冒泡排序

 

 代码实现:

  public class SelectSort
    {
        public static void Sort(int[] arr)
        {
            int n = arr.Length;
            for (int i = 0; i < n; i++)
            {
                int min = i;
                for (int j = i + 1; j < n; j++)
                {
                    if (arr[j] < arr[min])
                    {
                        min = j;
                    }
                }

                //将其中一个元素和其他所有未比较 过的元素对比一遍之后进行交换 
                int temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;

            }


        }
 
    }


 调用:

      static void Main(string[] args)
        {
            int[] arr = { 3, 4, 1, 222};

            SelectSort.Sort(arr);

            for (int i = 0; i < arr.Length; i++)
            {
                Console.WriteLine(arr[i]);
            }
        }

 

结果:

1
3
4
222

 

冒泡排序和选择排序对比

冒泡排序在对比的时候大概率会交换多次,但是选择排序在为每一个元素做对比的时候只需要记录下最小/大值的索引,最后进行交换就可以,总体来说效率比冒泡高。