zoukankan      html  css  js  c++  java
  • 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);
                }
            }
        }
    }
  • 相关阅读:
    Maximum Depth of Binary Tree
    Single Number
    Merge Two Sorted Lists
    Remove Nth Node From End of List
    Remove Element
    Remove Duplicates from Sorted List
    Add Two Numbers
    编译视频直播点播平台EasyDSS数据排序使用Go 语言 slice 类型排序的实现介绍
    RTMP协议视频直播点播平台EasyDSS在Linux系统中以服务启动报错can’t evaluate field RootPath in type*struct排查
    【解决方案】5G时代RTMP推流服务器/互联网直播点播平台EasyDSS实现360°全景摄像机VR直播
  • 原文地址:https://www.cnblogs.com/weiios/p/3933996.html
Copyright © 2011-2022 走看看