先看個時間複雜度排序空間時間複雜度的圖
我這裏只寫了兩個,太費腦子了,現在腦子不夠用,其他的後續再寫
/**
* 冒泡排序 我不斷把相鄰兩個元素做比較 小的放前 大的放後
* 時間複雜度 O(n)
*/
@Test
public void test1() {
int[] test = {1,3,9,7,11,17,16};
for (int i = 0; i < test.length-1; i++) {
for (int j = 0; j < test.length-1-i; j++) {
if(test[j] > test[j+1] ) {
int temp = test[j];
test[j] = test[j+1];
test[j+1] = temp;
}
}
}
for (int i : test) {
System.err.println(i);
}
}
```java
/**
* 直接插入排序 基本思想 將未排序的數據插入至已排好序序列的合適位置
* 時間複雜度O(n)
*/
@Test
public void test1() {
int[] data = {1,3,9,7,11,17,16};
int temp; // 中間數據
for (int i = 1; i < data.length; i++) { // 循環所有的數據
temp = data[i]; // 賦值給中間數據 先把數組中 第二個數給中間值 然後第一個和第二個進行比較
int j; // 要比較的數的索引 如果是 第一個數 大於第二個數 然後把
for(j = i - 1; j >= 0; j--) {
if(data[j] > temp) { // 如果要比較的數大於中間數
data[j + 1] = data[j]; // 要比較的數往右移 也就是大的在最後
}else{
break;
}
}
data[j + 1] = temp; // 之前已經把大的靠後的 現在把小的放到 大的的前一個位置 i-1 +1 = j 然後把中間數據 賦值給之前比較小的那個
}
for (int i : data) {
System.out.println(i);
}
}