一:什么是选择排序
最简单的排序算法,首先从数组中找到最小的值,将其与第一个元素交换位置(如果第一个元素是最小元素则与自己交换)。在剩下的元素中找到最小的元素,与第二个元素进行交换。依次往复,直到整个数组排序结束。
二:排序流程
每一趟排序我们都会确定一个最小的值,并将其放置在第i个位置上,排序只需要执行a.length-1次,因为第a.length次只剩下一个元素,无需进行比较。
选择排序比较容易理解和实现,有鲜明的特定:
1、运行时间和输入无关。
无论数组的输入状态如何,有序、无序或者主键全部相等,排序所花费的时间相同。
2、数据移动是最少的
整个排序结束只需要进行N次交换,与其它排序算法比较移动的次数最小。
三:代码实现
public class SelectSort { public static void main(String args[]){ int a[] = {10,23,5,2,112,34,22,99,0,45,1}; sort(a); show(a); } private static void show(int[] a) { System.out.println("排序的结果"); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } public static void sort(int[] a){ for(int i=0;i<a.length-1;i++){ int min = i; for(int j=i+1;j<a.length;j++){ if(less(a,j,min)){ min = j; } } exch(a,i,min); } } /**数据交换*/ private static void exch(int[] a, int i, int min) { int temp = a[i]; a[i] = a[min] ; a[min] = temp; } /**数据比较*/ private static boolean less(int[] a, int j, int min) { if(a[j] > a[min]){ return false; }else{ return true; } } }
排序结果: