logo资料库

算法实验报告--众数问题.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
算法实现题
算法实验报告 算法实现题 2-1 众数问题 给定含有 n 个元素的多重集合 S,每个元素在 S 中出现的次数称为该元素的重数。 多重数集 S 中的重数最大的元素称为众数。 例如, S={1,2,2,2,3,5}。 多重集 S 得众数是 2,其重数为 3。 算法设计: 对于给定的由 n 个自然数组成多重数集 S,计算 S 的众数及其重数。 数据输入: 输入数据由文件名为 input.txt 的文本文件提供。文件的第 1 行为多重集 S 中元 素个数 n;在接下来的 n 行中,每行有一个自然数。 结果输出: 将计算结果输出到文件 output.txt。输出文件有两行,第 1 行是众数,第 2 行 是重数。 输入文件示例 input.txt 6 1 2 2 2 输出文件示例 output.txt 2 3
算法实验报告 3 5 运行代码: #include #include using namespace std; //存储数y与出现频率 class Number{ public: Number(){count = 0;} int value; int count; }; void write(char* filename,int size,Number *num); void mode(int *a,int size,Number *num); void quickSort(int*,int,int); int Partition(int*,int,int); int main() { int size=0; int frequency=0; char* inFileName = "D:\\C++\\input.txt"; char* outFileName = "D:\\C++\\output.txt"; ifstream input(inFileName,ios::in); //从文件读取数据 input >> size;
算法实验报告 int *a = new int[size]; for(int i=0; i>a[i]; input.close(); //对数组用快排排序 quickSort(a,0,size-1); Number *num = new Number[size]; mode(a,size,num); write(outFileName,size,num); system("pause"); return 0; } //将众数与重数写入文件,如果有多个,则将所有结果依次写入文件 void write(char* filename,int size,Number *num) { int max = 0,i; for( i=1; inum[max].count) max = i -1; ofstream output; output.open(filename,ios::out); output << num[max].value << "\n" << num[max].count << endl; for(i=0; i x to right while(true) { while(arr[++i]x); if(i>=j)break; swap(arr[i],arr[j]);
算法实验报告 } arr[p]=arr[j]; arr[j]=x; return j; } //快排 void quickSort(int *arr,int p,int r) { if(p
算法实验报告 利用快速排序可以在 O(n)平均时间内将数据集排好序,再花费 O(n)遍历数 据集找到众数与重数,总的时间复杂度为 O(n)。
分享到:
收藏