选择、插入、冒泡排序
[size=medium]* 选择排序
將要排序的對象分作兩部份,一個是已排序的,一個是未排序的,從後端未排序部份選擇一個最小值,並放入前端已排序部份的最後一個,例如:
排序前:70 80 31 37 10 1 48 60 33 80
1. [1] 80 31 37 10 70 48 60 33 80 選出最小值1
2. [1 10] 31 37 80 70 48 60 33 80 選出最小值10
3. [1 10 31] 37 80 70 48 60 33 80 選出最小值31
4. [1 10 31 33] 80 70 48 60 37 80 ......
5. [1 10 31 33 37] 70 48 60 80 80 ......
6. [1 10 31 33 37 48] 70 60 80 80 ......
7. [1 10 31 33 37 48 60] 70 80 80 ......
8. [1 10 31 33 37 48 60 70] 80 80 ......
9. [1 10 31 33 37 48 60 70 80] 80 ......
public static void selection(int[] number) { for(int i = 0; i < number.length - 1; i++) { int m = i; for(int j = i + 1; j < number.length; j++) if(number[j] < number[m]) m = j; if(i != m) swap(number, i, m); } } private static void swap(int[] number, int i, int j) { int t = number[i]; number[i] = number[j]; number[j] = t; } public static void insertion(int[] number) { for(int j = 1; j < number.length; j++) { int tmp = number[j]; int i = j - 1; while(i != -1 && tmp < number[i]) { number[i+1] = number[i]; i--; } number[i+1] = tmp; } } public static void bubble(int[] number) { boolean flag = true; for(int i = 0; i < number.length-1 && flag; i++) { flag = false; for(int j = 0; j < number.length-i-1; j++) { if(number[j+1] < number[j]) { swap(number, j+1, j); flag = true; } } } } private static void swap(int[] number, int i, int j) { int t = number[i]; number[i] = number[j]; number[j] = t; }