程式設計師成長之旅 歸併排序和非比較排序(計數排序)

2021-10-02 18:32:58 字數 3256 閱讀 5622

非比較排序(計數排序)

基本思想

歸併排序(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個預設函式。概念建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資...