我有一個關於快速排序算法的問題。我執行快速排序算法並播放它。 初始未排序數組中的元素是從特定範圍中選擇的隨機數。 我發現隨機數的範圍影響運行時間。例如,從範圍(1 - 2000)中選擇的1,000,000個隨機數的運行時間需要40秒。如果從範圍(1 - 10,000)中選擇1,000,000個號碼,則需要9秒。 但我不知道如何解釋它。在課堂上,我們討論樞軸值會影響遞歸樹的深度。
對於我的實現,數組的最後一個值被選爲樞軸值。我不使用隨機方案來選擇樞軸值。C++快速排序運行時間
int partition(vector<int> &vec, int p, int r) {
int x = vec[r];
int i = (p-1);
int j = p;
while(1) {
if (vec[j] <= x){
i = (i+1);
int temp = vec[j];
vec[j] = vec[i];
vec[i] = temp;
}
j=j+1;
if (j==r)
break;
}
int temp = vec[i+1];
vec[i+1] = vec[r];
vec[r] = temp;
return i+1;
}
void quicksort (vector<int> &vec, int p, int r) {
if (p<r){
int q = partition(vec, p, r);
quicksort(vec, p, q-1);
quicksort(vec, q+1, r);
}
}
void random_generator(int num, int * array) {
srand((unsigned)time(0));
int random_integer;
for(int index=0; index< num; index++){
random_integer = (rand()%10000)+1;
*(array+index) = random_integer;
}
}
int main() {
int array_size = 1000000;
int input_array[array_size];
random_generator(array_size, input_array);
vector<int> vec(input_array, input_array+array_size);
clock_t t1, t2;
t1 = clock();
quicksort(vec, 0, (array_size - 1)); // call quick sort
int length = vec.size();
t2 = clock();
float diff = ((float)t2 - (float)t1);
cout << diff << endl;
cout << diff/CLOCKS_PER_SEC <<endl;
}
3樞軸值的中值給出了更穩定的實現 – 2010-04-29 13:14:01
您需要發佈快速排序代碼來回答您的問題。 – 2010-04-29 13:14:52
你有沒有試過C qsort實現來驗證? – 2010-04-29 13:17:58