将待排序序列分红两部分,一部分为有序序列,另外一部分为无序序列。第一趟:从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+" "); } } }