选择排序

 (一)什么是选择排序

   它的工作原理是每一次从待排序的数据中选出最大(小)的一个元素,存放在序列的起始位置,然后再从剩余未排序中继续寻找最大(小)小)元素,然后再从剩余从排序元素中继续寻找最大(小)元素,放到的已排序序列的末尾。以此类推,直到全部待排序元素派完。

  如果已经了解了选择排序,那么可以直接进入到总结篇:https://www.cnblogs.com/gdouzz/p/10759399.html

    (二)代码实现

     static int[] SelectionSort(int [] arr)
        {
            for(var i = 0; i < arr.Length; i++)
            {
                var tempValue = arr[i];
                for(var k = i; k < arr.Length; k++)
                {
                    if (tempValue < arr[k])
                    {
                        var temp = arr[k];
                        arr[k] = tempValue;
                        tempValue = temp;
                    }
                }
                arr[i] = tempValue;
            }
            return arr;
        }

 (三)时间复杂度分析

    //选择排序 //选择排序的主要优点与数据移动有关,如果某个元素在正确的位置,则它不会被移动。
    //选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 {\displaystyle n} n个元素的表进行排序总共进行至多
    //displaystyle n-1} {\displaystyle n-1}次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
    //最坏情况下
    //逆序,5,4,3,2,1
    //第一趟,先找到最小的,比较4次,交换一次。
    //第二趟,1,4,3,2,5  比较3次,交换一次。
    //第三躺,1,2,3,4,5  比较2次, 交换一次。
    //第四趟,1,2,3,4,5  比较1次,交换一次。
    //最坏情况下,比较次数o(n²),交换次数n-1次
    //最好情况
    //本身是有序的:1,2,3,4,5,交换零次,比较次数还是o(n2)的平方。
    //这个特性导致了选择排序,几乎不会有人用了。

  看完这个时间复杂分析了,终于明白为啥工作那么久了,从来没有想着去用选择排序了。

  选择排序,这个算法不常用,基本不用,主要是用来扩展我们的思维的。

 

posted @ 2019-04-23 21:48  GDOUJKZZ  阅读(259)  评论(0编辑  收藏  举报