非比較排序(計數排序)
基本思想
歸併排序(merge-sort)是利用歸併的思想實現的排序方法,該演算法採用經典的分治(divide-and-conquer)策略(分治法將問題分(divide)成一些小的問題然後遞迴求解,而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之)。
歸併排序一般可以用來解決外排序的問題,但有個缺點就是需要開闢o(n)的空間
**假如是公升序
時間和空間複雜度
時間複雜度:o(nlogn)穩定性空間複雜度:o(n)
穩定**實現
#include
#include
#include
using namespace std;
//遞迴
void
_mergesort
(int
* array,
int left,
int right,
int* tmp)
else
}while
(begin1 <= end1)
while
(begin2 <= end2)
//最後將其拷貝到原陣列
memcpy
(array + left, tmp + left,
sizeof
(int)*
(i - left));
}void
mergesort
(int
* array,
int size)
//非遞迴
基本思想
計數排序(count sort)是乙個非基於比較的排序演算法,該演算法於2023年由 harold h. seward 提出。它的優勢在於在對一定範圍內的整數排序時,它的複雜度為ο(n+k)(其中k是整數的範圍),快於任何比較排序演算法。
**假如是公升序
1.比較出來最大的數和最小的數,從而知道要開闢多大的輔助空間
2.統計出每乙個數出現的次數
3.根據統計出來的次數,將其放回原來的陣列中
時間和空間複雜度
時間複雜度:ο(max(範圍,n))
空間複雜度:ο(n)
穩定性穩定
**實現#define _crt_secure_no_warnings 1
//計數排序
非比較排序 歸併排序
一 歸併排序的思想 歸併排序利用了分冶的思想,將一塊待排序的區間,取中間位置,分成兩段區間 然後通過不斷的遞迴,直到每段區間只有乙個數字,這時我們就認為該段區間有序,然後將這相鄰的兩段有序區間合併為乙個有序區間 這樣通過遞迴先 陣列,然後再合併陣列,就完成了歸併排序 二 實現 include inc...
四 歸併排序 非比較排序 歸併排序 計數排序
基本思想 歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有 序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。歸...
程式設計師成長之旅 類和物件中篇
析構函式 拷貝建構函式 賦值運算子過載 const成員 取位址及const取位址運算子過載 如果乙個類中什麼都沒有,我們都知道它是空類,但是空類是不是什麼事情都不做,答案當然是否定的,它會生成6個預設函式。概念建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資...