排序演算法整理

2021-08-09 08:17:12 字數 1468 閱讀 5415

template

void cinsertsort::mysort(function compare)

}}

template

void cselectsort::mysort(function compare)

swap(datas[i], datas[id]);

}}

void cshellsort::mysort(function compare)

}h /= 3;

}}

void cmergesort::mysort(function compare)

}}

template

void cquicksort::qksort(iter beg, int len, function& compare)

template

int cquicksort::partial(iter beg, int len, int pos, function& compare)

swap(*beg, *(beg + j));

return j;

}

演算法

穩定性是否為原地排序

時間複雜度

空間複雜度

備註選擇排序否是n2n

21 1

插入排序是是

介於n' role="presentation" style="position: relative;">nn和n2n

2之間1

1希爾排序否是

無法確定:?

nlog⁡n

' role="presentation" style="position: relative;">n

logn

nlog⁡n

1 1

快速排序否是

nlog⁡n

' role="presentation" style="position: relative;">n

logn

nlog⁡n

lgnlg⁡n

三向快速排序否是

n n

~nlog⁡

n' role="presentation" style="position: relative;">n

logn

nlog⁡n

之間lg

n lg⁡n

歸併排序是否

nlog

n n

log⁡

nn n

堆排序否是

nlog⁡n

' role="presentation" style="position: relative;">n

logn

nlog⁡n

1 1

這裡主要參考了《演算法》4th.

排序 排序演算法整理

經常零零散散的用到排序演算法,將幾類常見的總結下來 時間複雜度o n 2 空間複雜度o 1 穩定排序 param arr public static void insersort int arr else arr j 1 tmp 氣泡排序 時間複雜度 o n 2 空間複雜度o 1 穩定排序 para...

排序演算法整理

先把常用排序演算法進行分類 插入排序 直接插入排序 折半插入排序 希爾排序 交換排序 氣泡排序 快速排序 選擇排序 簡單選擇排序 堆排序 歸併排序 基數排序 下面我們乙個乙個來看 1.直接插入排序 進行n 1趟排序,每趟把乙個元素插入到前面已經排好序的序列中,其時間複雜度為o n 並且由於判斷要插入...

排序演算法整理

2.後移元素,空出插入位置 插入位置下標為low或high 1 for j i 1 j low j 3.插入元素 此時low high 1 a low current 與直接插入排序相比,減少了元素的比較次數。每次迴圈,都是先找到插入位置,再來移動元素,而不是比較一次移動乙個元素。一次迴圈比較log...