將待排序序列分紅兩部分,一部分爲有序序列,另外一部分爲無序序列。第一趟:從a[0]到a[n-1]中找到最小的數a[i],而後a[i]與a[0]交換,第二趟:從a[1]到a[n-1]中找到最小的數a[j],而後將a[j]與a[1]交換,第三趟:從a[2]到a[n-1]中找到最小的數a[k],而後將a[k]與a[2]交換···· java
{5,2,6,0,3,9,1,7,4,8} 算法
第一趟:0 {2 ,6 ,5 ,3 ,9 ,1 ,7 ,4 ,8} 數組
第二趟:0, 1 {6 ,5 ,3 ,9 ,2 ,7 ,4 ,8} spa
第三趟:0, 1, 2 {5 ,3 ,9 ,6 ,7 ,4 ,8} code
······ 排序
package test.algorithm.FastSlowPointer; public class SelectSort { /** * 選擇排序 * @param list */ public static void selectSort(int[] list){ int min = 0 , temp = 0 , count1=0, count2=0; //每一輪先選出最小的元素,再判斷是否須要移動位置 for(int i=0;i<list.length;i++){ min = i; for(int j=i+1;j<list.length;j++){ count1++; //與min比較,找出最小的元素 if(list[j]<list[min]){ min = j; } } //若是不等於,移動元素位置 if(min!=i){ count2++; temp = list[min]; list[min] = list[i]; list[i] = temp; } } System.out.println("比較"+count1+"次,移動"+count2+"次"); } public static void main(String[] args) { int[] list = {5,2,6,0,3,9,1,7,4,8}; selectSort(list); System.out.print("打印數組:"); for(int i :list){ System.out.print(i+" "); } } }