關於我的幼稚快速排序算法只是一個快速(哈哈)問題:我的快速排序實現有什麼問題?
#include <iostream>
template <class T>
void quicksort2(T array[] , int start, int end){
int i = start;
int j = end;
int temp;
int pivot = (end - start)/2;
// Partioning
while(i <= j){
while(array[i] < array[pivot]){
i++;
}
while(array[j] > array[pivot]){
j--;
}
if(i <= j){
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}
// Sorting partions
if(start <= j){
quicksort2(array , start , j);
}
if(end >= i){
quicksort2(array , i , end);
}
}
當我運行一個測試陣列上的代碼,它似乎只有陣列(不到邊的左側)被排序並且不會跳轉到排序右側並創建一個無限循環。
運行代碼之前有點警告,有時會在我測試陣列上運行代碼時凍結我的機器。
無論如何,感謝您的幫助!此外,這不是用於作業(什麼類與排序算法需要你馬上學習快速排序?)
快速排序是我在大學的高級算法課程中學到的第一個算法,就像永遠以前一樣。 –
你正在運行windows嗎? –
你使用'temp'是有點危險的。 'temp'是'int'但是'array [i];'在'temp = array [i];'是'T'。我會建議使用['std :: swap'](http://en.cppreference.com/w/cpp/algorithm/swap),但看起來很愚蠢。我用手寫了10次,9次好,1次錯。討厭的錯誤。 'std :: swap(array [i],array [j])'應該這樣做,並且已經被模板化了。 – luk32