下面是个人对选择排序的理解,如有不正确的地方或者更好的方法请指正,谢谢。。。
选择排序 思路。
每次拿第一个和之后的所有比较 找出最小的换位置直到所有的比较完
public class SelectionSort { /** * 降序 选择排序 * * * 此方法有个缺点 内层的每次比较都会交换数据 * * @param list */ // public void sort(ArrayList<Integer> list) { // int temp = 0; // if (list.isEmpty()) { // return; // } // for (int i = 0; i < list.size(); i++) { // for (int j = i + 1; j < list.size(); j++) { // if (list.get(i) < list.get(j)) { // temp = list.get(i); // list.set(i, list.get(j)); // list.set(j, temp); // } // } // } // } /** * 降序 选择排序 * <p> * <p> * 上面方法的优化版 * * @param list */ public void sort(ArrayList<Integer> list) { int temp = 0; int maxIndex = 0; if (list.isEmpty()) { return; } for (int i = 0; i < list.size() - 1; i++) { maxIndex = i; for (int j = i + 1; j < list.size(); j++) { if (list.get(maxIndex) < list.get(j)) { maxIndex = j; } } if (i != maxIndex) { temp = list.get(i); list.set(i, list.get(maxIndex)); list.set(maxIndex, temp); } } } }
测试:
public class Test { public static void main(String[] args) { /************排序**********/ ArrayList<Integer> list = new ArrayList<Integer>(10); list.add(2); list.add(5); list.add(3); list.add(22); list.add(3); list.add(6); list.add(9); list.add(10); list.add(11); list.add(14); list.add(27); list.add(10); list.add(32); list.add(44); list.add(55); list.add(100); SelectionSort selectionSort = new SelectionSort(); selectionSort.sort(list); print(list); } private static void print(List list) { for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
输出:
100
55
44
32
27
22
14
11
10
10
9
6
5
3
3
2