我一直在尋找所有的線程在這裏,似乎無法找到一個解決方案的工作。排序工作,但它比它應該是非常慢。下面是代碼(我工作了一個頭文件):我似乎無法弄清楚爲什麼我的合併排序如此緩慢
#pragma once
#ifndef DataGen_h
#define DataGen_h
#include "RandomSupport.h"
void merge(long list[], long start, long mid, long end) {
long i = start;
long j = mid + 1;
while (j <= end && i <= mid) {
if (list[i] < list[j]) {
i++;
}
else {
long temp = list[j];
for (long k = j; k > i; k--) {
list[k] = list[k - 1];
}
list[i] = temp;
mid++;
i++;
j++;
}
}
}
void merge_sort(long list[], long startIndex, long endIndex)
{
if (startIndex >= endIndex){
return;
}
long midIndex = (startIndex + endIndex)/2;
merge_sort(list , startIndex, midIndex);
merge_sort(list, midIndex + 1, endIndex);
merge(list, startIndex, midIndex, endIndex);
}
void efficientRandomSortedList(long temp[], long s) {
// Get a new random device
randomizer device = new_randomizer();
// Get a uniform distribution from 1 to 1000
uniform_distribution range = new_distribution(1, 45000);
for (long i = 0; i < s; i++) {
// At every cell of the array, insert a randomly selected number
// from distribution defined above
temp[i] = sample(range, device);
}
// Now sort the array using insertion_sort
merge_sort(temp, 0, s - 1);
}
#endif /* DataGen_h */
這是類,所以不幸的是我不能改變我的工作中的數據類型。任何幫助或一般批評我的格式會有所幫助。
你可以包含一些性能數字嗎?請記住合併排序的平均性能爲'O(N * lgN)',所以如果你的代碼擴展到這個,那麼沒有什麼是錯的。 –
你的'merge'是二次的,因爲你每次需要插入時移動'O(n)'元素的方式。這有點挫敗了整個觀點。 –
*我一直在尋找所有的線程,似乎無法找到解決方案。* - 你沒有足夠努力。你看到[這個線程](https://stackoverflow.com/questions/24650626/how-to-implement-classic-sorting-algorithms-in-modern-c)? – PaulMcKenzie