排序演算法C 實現,複雜度

2022-08-14 20:09:15 字數 2742 閱讀 7756

八大排序演算法

直接插入排序

其餘排序:

------------------------------------【整理】-----------------------------

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 以二倍的速度增長,也就是說到...