java中数组的排序——选择排序的两种方式比较
NumSort.java
//数组排序 public class NumSort { public static void main(String[] args) { //拿到args数组的长度,为a数组的空间大小 int[] a = new int[args.length]; for (int i=0; i<args.length; i++) { //将args数组中的值转换为int a[i] = Integer.parseInt(args[i]); } System.out.println("排序前"); //打印数组a print(a); //选择排序数组a selectionSort(a); System.out.println("排序后"); //打印数组a print(a); } //打印数组a private static void print(int[] a) { for(int i=0; i<a.length; i++) { System.out.print(a[i] + " "); } System.out.println(); } //选择排序数组a /* 分析算法: 排序前 2 4 1 3 8 7 6 5 9 0 _ i=0 1 4 2 3 8 7 6 5 9 0 0 4 2 3 8 7 6 5 9 1 _ i=1 0 2 4 3 8 7 6 5 9 1 0 1 4 3 8 7 6 5 9 2 _ i=2 0 1 3 4 8 7 6 5 9 2 0 1 2 4 8 7 6 5 9 3 _ i=3 0 1 2 3 8 7 6 5 9 4 _ i=4 0 1 2 3 7 8 6 5 9 4 0 1 2 3 4 8 6 5 9 7 _ i=5 0 1 2 3 4 7 6 5 9 8 0 1 2 3 4 6 7 5 9 8 0 1 2 3 4 5 7 6 9 8 _ i=6 0 1 2 3 4 5 6 7 9 8 _ i=7 0 1 2 3 4 5 6 7 9 8 _ i=8 0 1 2 3 4 5 6 7 8 9 _ i=9 0 1 2 3 4 5 6 7 8 9 */ private static void selectionSort(int[] a) { //拿出第一个数a[i]和后面的每一个数进行比较 for(int i=0; i<a.length; i++) { //下一个数a[j] for(int j=i+1; j<a.length; j++) { //从小到大进行排列,如果第一个数大于后面的数,则交换 if(a[j] < a[i]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } } } //选择排序的算法优化,最小的值只交换一次,位置交换 /* 可读性和效率 分析算法: 0 1 2 3 4 5 6 7 8 9 - - - - - - - - - - 排序前 2 4 1 3 8 7 6 5 9 0 i=0,k = 0 2 9 0 4 1 3 8 7 6 5 9 2 i=1,k = 1 2 0 1 4 3 8 7 6 5 9 2 i=2,k = 2 3 9 0 1 2 3 8 7 6 5 9 4 i=3,k = 3 i=4,k = 4 5 6 7 9 0 1 2 3 4 7 6 5 9 8 i=5,k = 5 6 7 0 1 2 3 4 5 6 7 9 8 i=6,k = 6 i=7,k = 7 i=8,k = 8 9 0 1 2 3 4 5 6 7 8 9 */ private static void selectionSort2(int[] a) { int k, temp; for(int i=0; i<a.length; i++) { //k为最小的数的位置 k = i; for(int j=k+1; j<a.length; j++) { if(a[j] < a[k]) { //将数的位置调换 k = j; } } //如果k的位置不等于i的位置,交换 if(k != i) { temp = a[i]; a[i] = a[k]; a[k] = temp; } } } }
F:\java>javac NumSort.java F:\java>java NumSort 2 4 1 3 8 7 6 5 9 0 排序前 2 4 1 3 8 7 6 5 9 0 排序后 0 1 2 3 4 5 6 7 8 9 F:\java>