我一直在嘗試在C++中編寫一個模板化函數,它可以接受任何類型的數組並對其進行排序。使用的排序必須是快速排序或合併排序,但是在實現其中的任何一種時遇到很多問題,因爲快速排序標題通常帶有頂部和底部參數,而合併排序帶有第一和最後一個參數。我的函數頭看起來像這樣:void mySort(T *陣列,INT N)模板化快速/合併排序
到目前爲止,我有這樣的:
template <typename T>
void sort(T *a, int n)
{
int i = 0;
int j = n-1;
int tmp;
int pivot = a[(n-1)/2];
while (i <= j){
while (a[i] < pivot)
i++;
while (a[j] > pivot)
j--;
if (i<=j){
tmp = a[i];
a[i] = a[j];
a[j] = a[i];
i++;
j--;
}
}
if(0<j)
sort(a, j);
/*
if(i<right)
sort(
*/
}
我試圖用遞歸調用進行排序,但我不能找出如何爲所創建的正確分區調用遞歸,而無需使用不同的參數列表。
,還是你的代碼沒有他們,只有陣列和大小。爲什麼? – VillasV
當n太小時,您還需要停止遞歸。例如,當'j == 1'滿意'0
JSF
如果您忽略了關於pivot元素結束位置的任何知識,並且忽略任何遞歸問題的終止,那麼第二個排序將是'sort(a + j,n-j);'。 (不是說你應該忽略這些東西,只是回答你似乎在問的問題)。 – JSF