參考資料:
http://www.cnblogs.com/jingmoxukong/p/4303279.html
http://www.reibang.com/p/5e171281a387
選擇排序
每次從待排序的數(shù)組中动看,找到最小值,并交換到數(shù)組的最前面采记;
選擇排序算法思路:
- 從待排序的數(shù)組中,找出最小的元素;
- 如果最小元素咽块,不是待排序數(shù)組的第一個(gè)元素氯庆,將其交換;
- 從余下的n-1的數(shù)組中裁良,找出最小的元素,重復(fù)第 1 情臭、2 步省撑,直到排序完成
實(shí)現(xiàn)代碼:
public static void sort3(int a[]) {
int length = a.length;
// 需要遍歷獲取最小值的次數(shù);
// 前面 i 個(gè)元素之前的數(shù)組俯在,是排序好的竟秫,因?yàn)楹竺嬗?(int j = j+1, 所有這里 length - 1)
for (int i = 0; i < length - 1; i++) {
int minValue = a[i]; // 本地循環(huán)中找到的最小的數(shù)
int minIndex = i; // 最小數(shù)的索引
// 遍歷待排序數(shù)組, 從第 i+1個(gè)元素開(kāi)始往后遍歷
for (int j = i + 1; j < a.length; j++) {
if (minValue > a[j]) { // 如果大,則記錄新的最小值和下標(biāo)
minValue = a[j];
minIndex = j;
}
}
// 沒(méi)有找到跷乐,重新開(kāi)始循環(huán)肥败,減少交換次數(shù)
if (minIndex == i) {
continue;
}
// 交換2個(gè)數(shù)
a[minIndex] = a[i];
a[i] = minValue;
System.out.format("第 %d 趟:\t", i + 1);
printArray(a);
}
}
public static void printArray(int[] a) {
if (a != null) {
for (int i : a) {
System.out.print(i + "\t");
}
System.out.println();
}
}
測(cè)試輸出
public static void main(String[] args) {
int a[] = {1, 5, 9, 3, 2, 0, 4, 7, 6, 8}; //sort1(a);
sort3(a);
}