排序思想:(二者相同)
每次循環将最大值拿出來放到最後(或将最小值放到開頭),n-1趟循環後,即可完成排序
排序趟數:
最大n-1趟
排序原理:
冒泡排序:
每次循環,從第一個數開始,相鄰數依次比較,較大的往後放
選擇排序:
每次循環,拿出第一個數作為最小值,跟後面所有數依次比較,每次記錄最小值得下标,最後将第一個數和最小值交換
代碼實作如下:
//冒泡排序
public static void bubbleSort(int[] array){
boolean isExchange = false;
for (int i = 0; i < array.length - 1; i++) {//最大趟數length-1趟
for (int j = 0; j < array.length - 1 - i; j++) {//每次最大數放到後面,則每次減少比較次數
if (array[j]> array[j +1]) {//相鄰兩個數比較,将較大的放到後面
array[j] ^= array[j + 1];
array[j + 1] ^= array[j];
array[j] ^= array[j + 1];
isExchange = true;
}
}
if (!isExchange) {//如果沒有交換,說明中途已經排序完成,可以終止循環,直接退出,優化算法
break;
}
}
}
//選擇排序
public static void chooseSort(int[] array){
for (int i = 0; i < array.length - 1; i++) {//循環length - 1趟
int minIndex = i;//将本趟的第一個數暫時定義為最小值,則其下标為最小值下标
for (int j = i; j < array.length; j++) {//每次隔過前面的數,從第i個數開始循環;
if (array[minIndex] > array[j]) {
minIndex = j;//拿最小數跟後面的所有數比較,發現有比它小的,記錄下标;
}
}
if (minIndex != i) {//如果最小數不是本身,說明找到了另外的最小數,通過交換将這個最小數放到本趟循環的最前面;
array[i] ^= array[minIndex];//通過異或運算交換兩個數的數值;
array[minIndex] ^= array[i];
array[i] ^= array[minIndex];
}
}
}