选择排序

简述

  • 每次从序列的无序部分选出最小(或最大)的元素,与序列的无序部分的起始位置的元素交换
  • 对于一个待排序的序列,有i、j两个下标。
  • i 用来标记序列中还未有序的部分的当前下标(即只会遍历无序部分)。
  • j 用来遍历 i~Length-1(即序列无序部分) ,并找出其中最小(或最大)的元素。

特点

  • 每次元素交换会立即使得元素被放到正确的位置上,如果某个元素位于正确的最终位置上,则它不会被移动。
  • 如果序列中位于正确位置的元素越多,那么该序列用选择排序消耗的时间越小。

选择排序

代码:

class Program
{
    static void Main(string[] args)
    {
        int[] array = { 30, 12, 56, 78, 12125, 56, 44, 212, 45, 787, 21, 22, 56, 65 };  //待排序数组
        SelectSort(array);    
        foreach (int item in array)
            Console.WriteLine(item);
    }

    private static void SelectSort(int[] array)
    {
        int index_min = 0;
        for(int i = 0; i <= array.Length-2; i++)
        {
            index_min = i;
            int j = 0;
            for(j = i+1; j <= array.Length-1; j++)
            {
                //找到比min更小的值,那么更新min
                if(array[j] < array[index_min])
                {
                    index_min = j;
                }
            }
            //j的for循环结束后找到了最小值min,于是与无序序列起始元素即array[i]交换
            Swap(ref array[i], ref array[index_min]);
        }
    }

    private static void Swap(ref int a, ref int b)
    {
        int temp = a;
        a = b;
        b = temp;
    }
}

执行结果:

12
21
22
30
44
45
56
56
56
65
78
212
787
12125
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值