排序相關的演算法複雜度分析
下邊分別實現下各個演算法
簡單選擇排序
1這裡簡單選擇排序之所以不穩定是因為交換的時候會打亂順序,例如 5,4,5,1,6。第一次交換後會是1,4,5,5,6.已經破壞了穩定性。//簡單選擇排序
2void select_sort(int a, intn)3
16}17swap(a[i], a[index]);18}
19 }
演算法複雜度很明顯是o(n^2);
氣泡排序
1氣泡排序中有兩點需要注意的。第一它與簡單選擇排序相比其最好的時間複雜度是o(n)。第二 它是穩定性的演算法,因為它每次只交換相鄰的元素。//氣泡排序
2void bubble_sort(int a, intn)3
14}1516
if(flag == 0) return;17
}18 }
只交換相鄰的元素這個特點也讓它可以使用於鍊錶這個資料結構。
插入排序:
1插入排序最好的情形也是o(n)。//插入排序
2void insertion_sort(int a, intn)3
12 a[j+1] =tmp;13}
14 }
希爾排序就不實現了,這個排序的時間複雜度與具體的間隔選取之間有關。
堆排序(偽**):
1堆排序是基於選擇排序的思想上提出的。這裡利用實現更快的尋找最大最小值。其複雜度為o(nlgn)。它與簡單選擇排序相比編碼較繁瑣。//堆排
2int main(void)3
;5 vector heap(a, a + sizeof(a)/sizeof(int
));6
build(heap);
7 vectors;
8int maxindex =heap.size();
9for(int i = 0; i < maxindex; i++)
1022
if((2 * index + 2)
2327
swap(heap[min_index], heap[index]);
28if(index ==min_index)
29break;30
else
31 index =min_index;32}
3334}35
36return0;
37}3839
void build(vector &heap)
4054
if((2 * index + 2)
5559
swap(heap[min_index], heap[index]);
60if(index ==min_index)
61break;62
else
63 index =min_index;64}
65}66return ;
快速排序
1快排比較排序中平均速度最快的一種,但是如果選擇的主元不合適,會退化為n^2的複雜度。void quick_sort(int a, int begin, int
end)218
swap(a[first],a[slot]);
1920 quick_sort(a, begin, first-1
);21 quick_sort(a, first+1
, end);
22 }
歸併排序
1歸併排序相對於快排沒有選擇主元的問題,相應的也就沒有最壞時間那麼一說。其實還有一種使用空間是o(1)的歸併排序,實現起來要稍微複雜點。void divide_conquer_sort(int a, int begin, int
end)218
else
1923}24
25while(first_begin <=mid)
26 store.push_back(a[first_begin++]);
27while(second_begin <=end)
28 store.push_back(a[second_begin++]);
29for(int i = 0; i < store.size(); i++)
30 a[i+begin] =store[i];
31 }
各種排序演算法比較
花了很長時間終於把排序的基礎學了一下,這段時間學了很多東西,總結一下 學的排序演算法有 插入排序,合併排序,氣泡排序,選擇排序,希爾排序,堆排序,快速排序,計數排序,基數排序,桶排序 沒有實現 比較一下學習後的心得。我不是很清楚他們的時間複雜度,也真的不知道他們到底誰快誰慢,因為書上的推導我確實只是...
各種排序演算法的比較
穩定的排序演算法有 直接插入,冒泡,歸併,基數排序。一.快速排序 快排的三個步驟 1.選取樞紐元,一般用三數中值法,即求得left,center,right的中位數 不要用第乙個數,如果原始資料是倒序,效率將會很低 2.根據樞紐元把輸入資料劃分成為兩部分,左半部分的數比樞紐元小,右半部分比樞紐元大。...
各種排序演算法的比較
排序問題的解決方案是演算法問題當中最多的,常見的有插入排序,選擇排序,氣泡排序,歸併排序,快速排序,堆排序等,下面將對不同的排序演算法進行分析。假設均為實現從小到大排序,計算空間複雜度時,不考慮原本儲存元素的空間,只考慮實現演算法需要的額外空間。插入排序的基本思想是 從待排序的元素中選出乙個,插入已...