1. 程式人生 > >c++找眾數及其重數

c++找眾數及其重數

問題描述:在一個由n個元素組成的表中,出現次數最多的元素被稱為眾數。試寫一個尋找眾數及其重數的有效演算法,並分析其計算時間複雜性。
方法:
1. 首先用快排把資料排個序
2. 再使用find方法找出眾數及其重數
注:這裡第一步就跳過了,因為快排可以調庫函式,這裡主要是測試一下find方法的正確性。
程式碼如下:

#include <iostream>
using namespace std;

void find(int a[],int n){
    int i;
    int c[n];//(1)
    for (i=0;i<n;i++){
        c[i]=0
; } for (i = 0; i < n;) { c[i]=1; int j=i;//(2) while(a[i]==a[j]){ if (a[i]==a[i+1]) { i++;c[j]++; } else{ i++; } } } int max=c[0],k=0;//(3) for
(int i = 0; i < n; i++) { if(max<c[i]) { max=c[i]; k=i; } } cout<<"眾數是:"<<a[k]<<"重數是:"<<max<<endl; } int main(int argc, char const *argv[]) { int a[5]={1,1,2,2,3}; find(a,5); return 0; }

注:

  • (1)位置的c陣列是儲存a陣列對應位置數出現的次數,這樣也就為能找出多個眾數做了鋪墊
  • (2)位置的j儲存了一串相同數的第一個數的下標
  • (3)我這裡只找出了一個眾數及其重數,但是可以再遍歷一遍,把所有c中等於max的值找出來並列印,很簡單,這樣就能找出所有眾數了。用c陣列的作用也就突出在這裡,雖然我沒寫,懶啊~小記至此