先說一下題目吧,很簡單,就是給一組陣列,求陣列中的眾數,但是要用分治法。
首先是要運用快排的分割演算法,設函式名為quick,重複次數設定為n,眾數設為mode,陣列長度即為length.
c++實現的**如下:
#includeusing namespace std;
//全域性變數儲存重數
int n = 0;
//全域性變數儲存眾數
int mode = int_min;
void swap(int* arr, int num1, int num2)
//快排分割函式
int quick(int* arr, int low, int high)
if (low < high)
while (low < high )
if (low < high)
}arr[high] = temp;
if (ntemp > n)
return low;
}void getmode(int* arr, int start, int end)
int main()
; getmode(arr, 0, sizeof(arr) / sizeof(arr[0]) - 1);
cout << "眾數為:" << mode << " 重數為:" << n << endl;
}
程式執行結果如下: 眾數問題(分治法解決)
給定含有n個元素的多重集合s,每個元素在s 現的次數稱為該元素的重數,多重集s中重數最大的元素稱為眾數,給定多重集合s,求s中的眾數集重數。首先,我們最容易想到的就是統計每個數的出現次數,然後比較得出結果。這個思路可以利用容器來實現。仔細思考,這道題目還可以用分治法來解決。解決步驟 給陣列排序 找出...
c語言分治法求眾數重數 分治法之眾數問題
實驗總結 剛開始我沒有想到可以用分治法來做,用的是陣列來做。做完以後發現演算法太過複雜,而且處理較大的n時,時間複雜度和空間複雜度都比較大。於是我參考了演算法答案那本書,學到了分治法來解決這道題。但是在完成了用分治法的 以後,我發現了問題 輸出應該為 分治法解決這道題有乙個大前提 多重集中的元素是有...
分治法求陣列最大最小值
常規的做法是遍歷一次,分別求出最大值和最小值,但我這裡要說的是分治法 divide and couquer 將陣列分成左右兩部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然後綜合起來求總體的最大值及最小值。這是個遞迴過程,對於劃分後的左右兩部分,同樣重複這個過程,直到劃分區間...