选择排序算法的原理是找到数组中最小的元素,然后将它和数组第一个元素交换,接着在剩下的元素中找到最小的元素,接着和数组第二个元素交换,以此类推,直到将所有元素排序完毕
简单实现如下:
1 package 选择排序; 2 3 public class DemoMain { 4 public static void main(String[] args) { 5 Integer[] a = {5, 2, 6, 3, 4, 7}; 6 sort(a); 7 System.out.println(isSorted(a)); 8 show(a); 9 } 10 11 /** 12 * 排序 13 * @param a 排序的数组 14 */ 15 public static void sort(Comparable[] a) { 16 for (int i = 0; i < a.length - 1; i++) { 17 //获取当前要交换元素的下标 18 int index = i; 19 //找到最小的元素,将下标赋值给index 20 for (int j = i + 1; j < a.length; j++) { 21 if (less(a[index], a[j])) { 22 index = j; 23 } 24 } 25 //传递要交换的元素的下标i和最小值的下标index 26 exch(a, i, index); 27 } 28 } 29 30 /** 31 * 比较大小,v > w的值大于0 32 * 使用compareTo是因为引用类型实现了Comparable接口 33 * @param v 排序方法中传递的参数1 34 * @param w 35 * @return 返回判断结果 36 */ 37 private static boolean less(Comparable v, Comparable w) { 38 return v.compareTo(w) > 0; 39 } 40 41 42 /** 43 * 交换位置 44 * @param a 数组 45 * @param i 两个交换元素的下标 46 * @param j 47 */ 48 private static void exch(Comparable[] a, int i, int j) { 49 Comparable temp; 50 temp = a[i]; 51 a[i] = a[j]; 52 a[j] = temp; 53 } 54 55 /** 56 * 显示数据 57 * @param a 58 */ 59 private static void show(Comparable[] a) { 60 for (int i = 0; i < a.length; i++) { 61 if (i == a.length - 1) { 62 System.out.print(a[i]); 63 } else { 64 System.out.print(a[i] + ","); 65 } 66 } 67 } 68 69 /** 70 * 简单的判断是否排序成功 71 * @param a 排序后的数组 72 * @return 返回一个bool值 73 */ 74 private static boolean isSorted(Comparable[] a) { 75 for (int i = 0; i < a.length - 1; i++) { 76 if (less(a[i], a[i + 1])) { 77 return false; 78 } 79 } 80 return true; 81 } 82 }