八大排序演算法
直接插入排序
其餘排序:
------------------------------------【整理】-----------------------------
1.直接插入排序
//構建有序序列, 已排序序列中,從後向前掃瞄,插入到有序序列中。
//複雜度上來說,排序比較次數+移動次數,最好是n,最壞是n^2,平均是n^2
void insertsort(int *array, int n)
array[j] = temp;
}}
2.折半插入排序//折半插入排序
//在有序區上找空閒,用的是二分查詢方法
//nlogn
void bininsertsort(int* array, int n)
for (j = i - 1; j >= high + 1; j--)//集中元素後移
array[high + 1] = temp; //插入元素
} }}
3. 希爾排序//設定增量d,減少增量,對每一組增量間隔的數進行直接插入排序
//複雜度是
void shellsort(int* array, int n)
array[j + d] = temp;
} d = d / 2;
}}
1.選擇排序
從每一趟待排元素中,選取關鍵字最小的元素,放在已排序的最後,適合從大量元素中,選擇一部分排序元素
#include using namespace std;
void selectsort(int* array, int n)
} if (k != j)}}
2.氣泡排序
沒什麼好說的,交換次序,進行n輪,浮動到最前。
#include using namespace std;
void bubblesort(int* array, int n)
} }}
3.快速排序
為什麼快排是不穩定的:
舉個例子
待排陣列 6 9 9 10 11
我們選擇第乙個9作為主元(過程是隨機的),若把小於等於放在主元的左邊,則第二個9就跑到第乙個9左面了,從而導致不穩定
主元的選擇是隨機的,導致不穩定的原因在於我們無法保證每次都是穩定的,所以它是不穩定的。
氣泡排序改進而來
一趟劃分,找乙個中心點,然後把小於他的放在左邊,大於他的放在右邊。
遞迴左右。
int partition(int array, int s, int t) //一趟劃分
array[i] = array[j]; //右邊掃瞄結束
while (i < j && array[i] <= temp) //找到第乙個大於temp的,交換到位置j上
array[j] = array[i]; //左邊掃瞄結束
} array[i] = temp; //中心點放上位置。
}void quicksort(int* array, int s, int t)
}
#include using namespace std;
int heap[100] = ;
int n = 5;
void swap(int& a,int& b) ;
//向下建堆
void downheap(int low, int high)
else
}}//建小根堆操作
void creatheap(const int n)
}//刪除堆頂元素
void deleteheap(int& n)
//插入堆頂元素(要向上調整,一次調整)
void upheap(int low, int high)
else
}}//增加
void insertheap(int& n,int value)
//堆排序(小頂堆會排序為逆序)
時間複雜度:每一次關鍵字的桶分配都需要o(n)的時間複雜度,而且分配之後得到新的關鍵字序列又需要o(n)的時間複雜度。假如待排資料可以分為d個關鍵字,則基數排序的時間複雜度將是o(d2n) ,當然d要遠遠小於n,因此基本上還是線性級別的。係數2可以省略,且無論陣列是否有序,都需要從個位排到最大位數,所以時間複雜度始終為o(dn) 。其中,n是陣列長度,d是最大位數。
空間複雜度: 基數排序的空間複雜度為o(n+k),其中k為桶的數量,需要分配n個數。
排序演算法複雜度
在這篇裡,來記述下排序演算法複雜度,空間 時間 時間複雜度 對排序資料的總的操作次數。反映當n變化時,操作次數呈現什麼規律。空間複雜度 是指演算法在計算機內執行時所需儲存空間的度量,它也是資料規模n的函式。穩定 如果a原本在b前面,而a b,排序之後a仍然在b的前面。不穩定 如果a原本在b的前面,而...
排序演算法複雜度
時間複雜度 基數排序的空間複雜度為o n 排序方法 最好情況 最壞情況 平均情況 穩定性 空間複雜度 氣泡排序 o n o n2 o n2 穩定 快速排序 o nlogn o n2 o nlogn 不穩定 簡單選擇排序 o n2 不穩定 堆排序 o nlogn 不穩定 直接插入排序 o n o n2...
排序演算法 時間複雜度和空間複雜度
常數階o 1 無論 執行了多少行,只要沒有迴圈複雜結構,那麼這個的時間複雜度就是o 1 o 1 時間複雜度 沒有迴圈結構的順序執行,無論執行多少行,時間複雜度均為o 1 public static voido1 對數階o log2n o log2n 時間複雜度 此處 i 以二倍的速度增長,也就是說到...