排序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;
}
}
}
}
相關文章
- Sorting 排序演算法: Quick Sort 快速排序排序演算法UI
- 【新特性速遞】取消表格排序與排序提示資訊(SortingCancel,SortingToolTip)排序GC
- 計數排序 - Counting Sort排序
- Spring Data Solr 教程: 排序SpringSolr排序
- Spring MVC @SortDefault多欄位排序SpringMVC排序
- Sphinx Ranking Mode(排序模式) (翻譯)排序模式
- Comparator.comparing排序使用示例排序
- 【新特性速遞】表格多列排序(SortingMulti)排序
- PostgreSQL 13支援增量排序(Incremental Sorting)SQL排序REM
- stringgird中使用TClientDataSet排序的問題client排序
- 排序:氣泡排序&快速排序排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- 排序:交換排序——氣泡排序法排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 排序(2)--選擇排序,歸併排序和基數排序排序
- 排序(1)--插入排序和交換排序排序
- POJ 3684-Labeling Balls(反向拓撲排序-按條件排序輸出重量)排序
- 插入排序排序排序
- 排序之快速排序排序
- 排序——氣泡排序排序
- 排序之交換排序排序
- [排序] 歸併排序排序
- PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序PHP排序
- O(lgn)的三種排序,快速排序、歸併排序、堆排序排序
- 非交換排序-計數排序和桶排序排序
- 計數排序、桶排序和基數排序排序
- (十) 資料庫查詢處理之排序(sorting)資料庫排序
- 巧用SQL Server(Ranking)實現view的排序功能SQLServerView排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 快速排序&&歸併排序排序
- 排序之氣泡排序排序
- 排序之選擇排序排序
- 排序之插入排序排序
- 計數排序vs基數排序vs桶排序排序
- (一)氣泡排序、選擇排序、插入排序排序
- 筆試之排序-直接插入排序、氣泡排序、快速排序筆試排序
- 圖形化排序演算法比較:快速排序、插入排序、選擇排序、氣泡排序排序演算法