排序ING
總表
排序方法 | 時間複雜度(平均) | 時間複雜度(最壞) | 時間複雜度(最好) | 空間複雜度 | 穩定性 | 複雜性 |
直接插入排序 | O(n2) | O(n2) | O(n) | O(1) | 穩定 | 簡單 |
希爾排序 | O(nlog2n) | O(n2) | O(n) | O(1) | 不穩定 | 較複雜 |
直接選擇排序 | O(n2) | O(n2) | O(n2) | O(1) | 不穩定 | 簡單 |
堆排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(1) | 不穩定 | 較複雜 |
氣泡排序 | O(n2) | O(n2) | O(n)O(n) | O(1) | 穩定 | 簡單 |
快速排序 | O(nlog2n) | O(n2) | O(nlog2n) | O(nlog2n) | 不穩定 | 較複雜 |
歸併排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(n) | 穩定 | 較複雜 |
基數排序 | O(d(n+r)) | O(d(n+r)) | O(d(n+r)) | O(n+r) | 穩定 | 較複雜 |
簡單插入排序與希爾排序
吐槽:持續更新吧,希爾排序真繞
package piaoshen.openapi.web.test;
public class InsertionSort {
public static void main(String[] args) {
int[] ints = {2, 3, 5, 1, 23, 6, 78, 34};
insertionSort(ints);
printlnInt(ints, "簡單插入排序");
int[] arr = {5, 1, 7, 3, 1, 6, 9, 4};
shellSort(arr);
printlnInt(arr, "希爾排序");
}
/**
* 簡單插入排序
* 時間複雜度(平均)O(n2)
* 時間複雜度(最壞)O(n2)
* 時間複雜度(最好)O(n)
* 空間複雜度O(1)
* 穩定性 穩定
* 複雜性 簡單
*
* @param ints
*/
private static void insertionSort(int[] ints) {
for (int i = 1; i < ints.length; i++) {
//獲取當前值
int temp = ints[i];
//迴圈判斷,插入到前面應該有的位置
for (int j = i; j > 0; j--) {
//如果上一個比我手裡的小就插入到他的後面
if (ints[j - 1] > temp) {
ints[j] = ints[j - 1];
//判斷已經是最後一個了
if (j - 1 == 0) {
ints[j - 1] = temp;
break;
}
} else {
ints[j] = temp;
break;
}
//這種我感覺更像交換
/*if (ints[j - 1] > temp) {
ints[j] = ints[j - 1];
ints[j] = temp;
} */
}
}
}
private static void printlnInt(int[] ints, String name) {
System.out.println(name);
for (int in : ints) {
System.out.print(in + ",");
}
System.out.println("\n");
}
public static void shellSort(int[] arr) {
//希爾排序的增量
for (int step = arr.length / 2; step > 0; step /= 2) {
//對一個步長區間進行比較 [step,arr.length)
for (int i = step; i < arr.length; i++) {
int value = arr[i];
int j;
//對步長區間中具體的元素進行比較
for (j = i - step; j >= 0 && arr[j] > value; j -= step) {
//j為左區間的取值,j+step為右區間與左區間的對應值。
arr[j + step] = arr[j];
}
//此時step為一個負數,[j + step]為左區間上的初始交換值
arr[j + step] = value;
}
}
}
}
相關文章
- RCE_sample_ctf_questions(ing)
- 數論總結——更新ing
- ubunut18.04踩坑ing
- 練習的html,加油ing。HTML
- HL集訓日記(更新ing)
- 06 二分搜尋--ing
- Vue踩坑筆記(更新ing)Vue筆記
- 電腦白痴的筆記(更新ing)筆記
- C++關鍵字(持續更新ing)C++
- ING報告:向消費者學習
- 使用webpack構建一個專案 (更新ing)Web
- 富文字編輯器之遊戲角色升級ing遊戲
- 排序:氣泡排序&快速排序排序
- Go語言學習查缺補漏ing Day1Go
- Go語言學習查缺補漏ing Day4Go
- Go語言學習查缺補漏ing Day3Go
- Go語言學習查缺補漏ing Day7Go
- Go語言學習查缺補漏ing Day8Go
- Go語言學習查缺補漏ing Day5Go
- Go語言學習查缺補漏ing Day6Go
- Go語言學習查缺補漏ing Day2Go
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 插入排序排序排序
- 排序之交換排序排序
- 排序——氣泡排序排序
- 排序之快速排序排序
- PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序PHP排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 快速排序&&歸併排序排序
- 非交換排序-計數排序和桶排序排序
- 計數排序vs基數排序vs桶排序排序
- C#/.NET/.NET Core學習視訊彙總(持續更新ing)C#
- 氣泡排序、歸併排序與快速排序比較排序
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- 排序演算法 - 快速排序排序演算法
- 選擇排序和快速排序排序