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希爾排序否是
無法確定:?
nlogn
' role="presentation" style="position: relative;">n
logn
nlogn
1 1
快速排序否是
nlogn
' role="presentation" style="position: relative;">n
logn
nlogn
lgnlgn
三向快速排序否是
n n
~nlog
n' role="presentation" style="position: relative;">n
logn
nlogn
之間lg
n lgn
歸併排序是否
nlog
n n
log
nn n
堆排序否是
nlogn
' role="presentation" style="position: relative;">n
logn
nlogn
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...