首页 > 编程语言 > 详细

排序算法------选择排序

时间:2019-07-24 01:13:39      阅读:93      评论:0      收藏:0      [点我收藏+]

选择排序原理比较简单,首先在未排序的序列定义初始值,再从剩余的序列中继续最小值(最大值),如果发现此值比初始值小(大),则将游标的位置设置成当前值的位置(比初始值小(大)),以此类推

下面贴代码

    class Program
    {
        static void SelectionSort<T>(T[] arr)where T:IComparable<T>
        {
            
            for (int i = 0; i < arr.Length-1; i++)
            {
                int min = i;
                for (int j = i+1; j < arr.Length; j++)
                {
                    if (arr[i].CompareTo(arr[j])>0)
                    {
                        min = j;
                    }
                }
                if (min != i)
                {
                    var temp = arr[min];
                    arr[min] = arr[i];
                    arr[i] = temp;
                }
                Print(arr);
            }
        }
        static void Print<T>(T[] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i] + " ");
            }
            Console.Write("\n");
        }
        static void Main(string[] args)
        {
            int[] arr = { 8, 7, 6, 5 };

            Program.SelectionSort(arr);
        }
    }

这里面还能进行优化,既然能够储存最小值,那当然也能储存最大值,只需要设置多一个max变量用来存储最大值就可以了。那么趟数就可以减少一半

static void SelectSortSecond<T>(T[] arr) where T : IComparable<T>
        {
            //决定趟数
            for (int i = 0; i < arr.Length/2; i++)
            {
                //判断是否排序
                bool Sorting = false;
                //用来储存最小值下标
                int min = i;
                //用来储存最大值下标
                int max = arr.Length;
                //i需要跟i+1以及其后面的元素进行比较
                for (int j = i + 1; j < arr.Length; j++)
                {
                    //如果arr[j]比arr[min]小,将j值赋值给min
                    if (arr[min].CompareTo(arr[j]) > 0)
                    {
                        min = j;
                    }
                    if (arr[max].CompareTo(arr[j]) < 0)
                    {
                        max = j;
                    }
                }
                //如果min值不与i相等,则交换两者的值
                if (min != i)
                {
                    var temp = arr[min];
                    arr[min] = arr[i];
                    arr[i] = temp;
                    Sorting = true;
                }
                if (max != arr.Length)
                {
                    var temp = arr[max];
                    arr[max] = arr[i];
                    arr[i] = temp;
                    Sorting = true;
                }
                if (Sorting == false)
                {
                    return;
                }

                Print(arr);
            }
        }

新人还在学习中,如果有错请帮忙纠正,谢谢dalao

排序算法------选择排序

原文:https://www.cnblogs.com/Reninsummer/p/11235082.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!