选择排序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互换位置