1. 程式人生 > >蠻力法,對一組資料先進行快排,再找出眾數

蠻力法,對一組資料先進行快排,再找出眾數

 環境 :Windows10, VS2010

#include <iostream>
#include <string>
using namespace std;

int Partition (int r[],int first,int end)  //劃分
{
    int i=first,j=end;
    while (i<j)
    {
        while (i<j && r[i]<=r[j]) j--;
            if (i<j)
            {
                int temp=r[i];r[i]=r[j];r[j]=temp;
                i++;
            }
            while (i<j && r[i]<=r[j]) i++;
            if (i<j)
            {
                int temp=r[i];r[i]=r[j];r[j]=temp;
                j--;
            }
    }
    return i;
}
void Quicksort(int r[], int first, int end)   //快速排序
{
    int pivot;
    if (first<end)
    {
        pivot = Partition(r, first, end);
        Quicksort(r, first, pivot-1);
        Quicksort(r, pivot+1, end);
    }
}    

 int mode(int b[],int m)     //找出眾數與出現次數
{
    int i=0,j=0,max = 0,number = 0,many= 0;
    max=0;
    while(i<m)
    {
        i = i + number;
        number = 0;
        for(j=i;j<m;j++)  //j = i j從i開始,不再從零開始
        {
            if(b[j]==b[i])
            {
                number+=1;
            }
            else
            {
                break;      //遇到不相等就跳出,不再繼續與後面的比
            }
            if(max<number)
            {
                max=number;
                many=b[i];
            }
        }
    }
    cout<<endl<<"這組資料的眾數為:"<<many<<endl<<"出現次數為: "<<max<<endl;  //把結果輸出到螢幕
    return 0;    
}


void main()
{
    int Data[100];
    int num;

    cout<<"請輸入你的資料的個數(不大於100): "<<endl;  //請使用者輸入資料的總數與資料
    cin>>num;
    cout<<"請輸入你的資料(用空格間隔): "<<endl;
    for(int i=0; i<num; i++)
    {
        cin>>Data[i];
    }
    cout<<"你輸入的資料是 "<<endl;    //展示資料
    for(int j=0; j<num; j++)
    {
        cout<<Data[j]<<" ";
    }

    int right = num - 1;     //right作為傳入的陣列右邊界
    Partition (Data, 0, right);  //呼叫劃分
    Quicksort(Data, 0, right); //呼叫快排

    cout<<endl<<"排序後的資料是: "<<endl;   //檢視排序後的資料
    for(int i=0;  i<num; i++)
    {
        cout<<Data[i]<<" ";
    }
    
    mode(Data, num);    //呼叫mode函式,找到眾數

    system("pause");
}