蠻力法,對一組資料先進行快排,再找出眾數
阿新 • • 發佈:2018-12-16
環境 :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"); }