有人可以解釋一下如何更改以下代碼以使用陣列的最后一個元素作為樞軸嗎?在此代碼示例中,我使用第一個元素作為我的樞軸。
我發現了一些其他代碼,但它們以不同的方式對陣列進行排序,這不是我想要的。
在我嘗試將樞軸更改為使用最后一個元素時,我沒有收到錯誤代碼,但在我的陣列中間排序失敗。很感謝任何形式的幫助。
int partition(vector<int>& v,int low, int high){
int pivot = v[low];
int ui{low};
int oi{high 1};
while(true){
while(v[ ui] < pivot){
if(ui == high){
break;
}
}
while(pivot<v[--oi]){
if(oi == low){
break;
}
}
if(ui >= oi){
break;
}
swap(v[ui],v[oi]);
}
swap(v[low],v[oi]);
return oi;
}
void quicksort(vector<int>& v, int low, int high){
if(high>low){
int pivot = partition(v,low,high);
quicksort(v,low, pivot - 1);
quicksort(v,pivot 1,high);
}
}
uj5u.com熱心網友回復:
選擇支點的位置并不重要。重要的是你選擇了一個。您甚至可以每次隨機選擇一個。
選擇樞軸后,您就可以開始移動元素,使用樞軸所在的位置作為最初未使用的位置,在洗牌元素時移動到位置。
完成磁區后,未使用的移動位置應位于左右兩側之間。將樞軸值粘貼在那里,并將該點的索引回傳給呼叫者。
uj5u.com熱心網友回復:
要從 using lowas pivot index 切換到 using high,您需要進行以下更改:
int partition(vector<int>& v,int low, int high){
// before:
//int pivot = v[low];
//int ui{low};
//int oi{high 1};
// after:
int pivot = v[high];
int ui{low - 1};
int oi{high};
while(true){
while(v[ ui] < pivot){
if(ui == high){
break;
}
}
while(pivot<v[--oi]){
if(oi == low){
break;
}
}
if(ui >= oi){
break;
}
swap(v[ui],v[oi]);
}
//before:
//swap(v[low],v[oi]);
//after:
swap(v[high],v[oi]);
return oi;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/422817.html
標籤:
上一篇:電子郵件回復率的貝葉斯平均值
