选择排序Selection_Sort

基本思想:和冒泡排序、直接插入排序并称为三大简单排序算法。显然,说明它们都很简单😀。

第一次选择出数组最小的数据的下标,然后通过和首位元素的交换将其放在数组首位。然后第二次循环从数组的第二位开始寻找数组中最小元素的下标,同样和第二个元素交换位置,依次类推,一直到确定倒数第二位元素,这样数组的排序就完成了。

举例在此有数据{38,49,65,97,76,13,27}. 首先确立一个标志位0,代表38的位置,然后判断49是否小于38,如果是就将标志位设置为该元素的下标,否则接着判断下一个元素直到数组结束,显然第一次循环找出的下标位置应该是5,将数组位置5和0的数据交换,此时变为{13,49,65,97,76,38,27}。同样从数组的第二位开始【既然第一位已经确定是数组中最小的元素,那么就无视它好了】,此时的标志位应为1,再次进行上述的判断,最终结果是49和27的位置互换。数组中第二小的元素27就被确定在了数组的第二个位置上,因此最终选择排序能够得到一个有序的数组。

时间复杂度:简单排序均为O(n^2)

代码:

 

    static void select(int [] a)
    {
        for (int i = 0; i < a.length - 1; i++)
        {
            int Index = i;
            for (int j = i + 1; j < a.length; j++)
            {
                if(a[j] < a[Index])
                    Index = j;
            }

            if (i != Index)
            {
                int temp = a[Index];
                a[Index] = a[i];
                a[i] = temp;
            }
            for (int n:a)
                System.out.print(n+" ");
            System.out.println();
        }
    }
    public static void main(String []args)
    {
        int [] a = {49,38,65,97,76,13,27,49};
        select(a);
    }

 

 

 

【代码有助于对算法的理解,我认为简单排序通过看代码是最直接回想出算法细节的方法】

原始数据如代码所示,排序结果:

13 38 65 97 76 49 27 49                       //49和13互换位置
13 27 65 97 76 49 38 49                       //38和27互换位置
13 27 38 97 76 49 65 49                      //65和38互换位置
13 27 38 49 76 97 65 49                     //97和49互换位置
13 27 38 49 49 97 65 76                     //76和49互换位置
13 27 38 49 49 65 97 76                     //97和65互换位置
13 27 38 49 49 65 76 97                     //97和76互换位置

posted @ 2019-11-19 00:25  LeftBody  阅读(172)  评论(0编辑  收藏  举报