分治法求陣列中的眾數

2021-10-07 16:19:52 字數 721 閱讀 1114

先說一下題目吧,很簡單,就是給一組陣列,求陣列中的眾數,但是要用分治法。

首先是要運用快排的分割演算法,設函式名為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 將陣列分成左右兩部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然後綜合起來求總體的最大值及最小值。這是個遞迴過程,對於劃分後的左右兩部分,同樣重複這個過程,直到劃分區間...