package basic_01;
/*
* 冒泡算法:穩(wěn)定,時間:n^2,相鄰兩個數(shù)值進行比較。end邊界逐漸減小,先確定end外層循環(huán)的變化形式,再確定內層循環(huán)比較的變化形式,
* 簡單選擇排序算法:不穩(wěn)定,時間:n^2,相鄰兩個數(shù)值進行比較。左側邊界逐漸增大。
* 插入排序算法:穩(wěn)定,時間:n^2,每步將一個待排序的記錄,按其順序碼大小插入到前面已經(jīng)排序的字序列的合適位置,直到全部插入排序完為止。
*
*
* */
public class Code_00_Bubble_select_insert {
public static void main(String[] args) {
int[] arr = { 15, 27, 36, 59, 42, 8 };
bubbleSort(arr);
printarr(arr);
}
public static void bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
} // 刨除特殊情況
for (int end = arr.length - 1; end > 0; end--) {
for (int i = 0; i < end; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
} // 注意i的邊界條件,i應該截止到end的左側
}
public static void selectSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
} // 刨除特殊情況
for (int i = 0; i < arr.length - 1; i++) {
int less = i;//定義一個變量用來存放最小值
for (int j = i + 1; j < arr.length; j++) {
less = arr[i] > arr[j] ? j : i;
}
swap(arr, less, i);
}
}//注意j的開始條件,應該是i右側的值
public static void insertSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
} // 刨除特殊情況
for (int i = 1; i < arr.length; i++) {
for (int j = i - 1; j >= 0; j--) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
}// 內層循環(huán):類似與插牌,不斷的將第j個數(shù)據(jù)與前j個數(shù)據(jù)進行比較,排好序;不斷向前推進
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void printarr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}