实现选择排序和堆排序——题集(十六)
来源:互联网 发布:java小项目实例 编辑:程序博客网 时间:2024/06/07 01:29
实现选择排序和堆排序——题集(十六)
今天分享一下实现选择排序和堆排序的源代码和测试用例,以及一个topK问题的求解。
实现选择排序的源代码和运行示例。
源代码如下:
#include<iostream>using namespace std;//实现选择排序void SelectSort(int* tmp, int len){//实现选择排序if(len<=0) return;int i=0;int end=len-1;while( i<end){int min=i;int max=end;for(int j=i; j<=end; j++){if(tmp[j]>tmp[max]){max=j;}if(tmp[j] < tmp[min]){min=j;}}swap(tmp[min],tmp[i]);if(max == i){//修正qc//此时max下标指的值,到了min下标下。swap(min,max);}swap(tmp[end],tmp[max]);++i;--end;}}void PrintArr(int* aim, int size){//打印for(int i=0; i<size; i++){cout<<aim[i]<<" ";}cout<<endl;}void TestSS(){///实现选择排序cout<<"实现选择排序"<<endl<<endl;//int tmp[]={4,2,1,7,3,8};int tmp[]={49,38,65,97,76,13,27,49,55,4};int len=sizeof(tmp)/sizeof(tmp[0]);cout<<"打印原数组: ";PrintArr( tmp, len);SelectSort( tmp, len);//实现选择排序cout<<"打印选择排序后的数组: ";PrintArr( tmp, len);cout<<endl<<endl;int tmp1[]={97,38,65,97,76,13,27,49,5,4};len=sizeof(tmp1)/sizeof(tmp1[0]);cout<<"打印原数组: ";PrintArr( tmp1, len);SelectSort( tmp1, len);//实现选择排序cout<<"打印选择排序后的数组: ";PrintArr( tmp1, len);}int main(){TestSS();///实现选择排序system("pause");return 0;}
运行结果:
堆排序的源代码和运行示例。
源代码如下:
#include<iostream>using namespace std;void AdjuctHeap(int* tmp, int parent, int len){//向下调整//if(len <= 1) return;int child=parent*2+1;while(child<len){if(child+1<len && tmp[child+1]>tmp[child]){++child;}if(tmp[parent] < tmp[child]){swap(tmp[parent], tmp[child]);parent=child;child=parent*2+1;}else{break;}}}void HeapSort(int* tmp, int len){if(len <= 1) return;//先构成堆for(int parent=(len-2)/2; parent>=0; parent--){AdjuctHeap( tmp, parent, len);//向下调整}//sortfor(int size=len-1; size>=0; size--){swap(tmp[0], tmp[size]);AdjuctHeap( tmp, 0, size);//向下调整}}void TestHeapS(){///实现堆排序cout<<"实现堆排序"<<endl<<endl;int tmp[]={49,38,65,97,76,13,27,49,55,4};int len=sizeof(tmp)/sizeof(tmp[0]);cout<<"打印原数组: ";PrintArr( tmp, len);HeapSort( tmp, len);cout<<"打印堆排序后的数组: ";PrintArr( tmp, len);}int main(){TestHeapS();///实现堆排序system("pause");return 0;}
运行结果:
topK问题:
本公司现在要给公司员工发波福利,在员工工作时间会提供大量的水果供员工补充营养。由于水果种类比较多,但是却又不知道哪种水果比较受欢迎,然后公司就让每个员工报告了自己最爱吃的k种水果,并且告知已经将所有员工喜欢吃的水果存储于一个数组中。然后让我们统计出所有水果出现的次数,并且求出大家最喜欢吃的前k种水果。
统计出所有水果出现的次数,并且求出大家最喜欢吃的前k种水果的源代码和运行示例。
源代码如下:
#include<iostream>using namespace std;#include<algorithm>#include <functional>#include<vector>#include<string>#include<map>//每个员工报告了自己最爱吃的k种水果,统计出所有水果出现的次数,并且求出大家最喜欢吃的前k种水果//mapvoid GetFavoriteFruit(const vector<string>& fruits, size_t k){if(k<=0) return;//打印出最喜欢的水果map<string, int> tmp;int size=fruits.size();for(int i=0; i<size; i++){tmp[fruits[i]]++;}int len=tmp.size();vector<pair<int,string>> aim;map<string, int>::iterator it=tmp.begin();for(int i=0; i<len; i++){cout<<" 水果名: "<<it->first<<" ;数目: "<<it->second <<endl;aim.push_back(make_pair(it->second ,it->first));++it;}sort(aim.begin(), aim.end(),greater<pair<int,string>>());//默认升序len=k;if(k>tmp.size())len=aim.size();cout<<endl<<"大家爱喜欢的"<<k<<"种水果是: ";for(int i=0; i<len; i++){cout<<aim[i].second<<" ";}cout<<endl<<endl;}void PrintVector2(vector<string> aim, int size){//打印for(int i=0; i<size; i++){cout<<aim[i]<<" ";}cout<<endl;}void TestMaxK(){//求出大家最喜欢吃的前k种水果string tmp[]={"西瓜", "梨", "李子", "葡萄", "苹果", "梨", "梨", "李子", "葡萄", "西瓜", "苹果", "梨", "李子", "葡萄"};int len=sizeof(tmp)/sizeof(tmp[0]);vector<string> fruits;for(int i=0; i<len; i++){fruits.push_back(tmp[i]);}cout<<"求topK问题"<<endl<<endl<<"打印所有水果: ";PrintVector2(fruits, len);//打印cout<<endl;GetFavoriteFruit(fruits, 3);}int main(){TestMaxK();//求出大家最喜欢吃的前k种水果system("pause");return 0;}
运行结果:
分享如上,如有错误,望斧正!愿大家学得开心,共同进步!
阅读全文
0 0
- 实现选择排序和堆排序——题集(十六)
- 选择排序——选择排序和堆排序
- 选择排序——简单选择排序和堆排序,C++代码实现
- 选择排序—堆排序
- 选择排序—堆排序
- java实现排序算法之选择排序(简单选择排序和堆排序)
- 选择排序——简单选择和堆排序
- 排序算法Java实现——选择排序(堆排序)
- 选择排序的实现——堆排序
- 算法-排序-选择排序(直接选择和堆排序)
- 2.选择排序(直接选择排序和堆排序)
- 选择排序(选择排序和堆排序)
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——JAVA实现
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 简单选择排序和堆选择排序代码实现
- 选择排序和堆排序
- 选择排序和堆排序
- 选择排序和堆排序
- 进程和线程的关系
- ios中pod相关命令
- C基础知识
- Java学习笔记:java基础语法
- day16(LinkedList)
- 实现选择排序和堆排序——题集(十六)
- jQuery解析xml文件,使用get方法实现省市县三级联动下拉框
- 欢迎使用CSDN-markdown编辑器
- 简单原生js实现开关门效果
- C++: 位操作
- 第一个maven示例-helloworld
- 感悟到,想写博客
- 职业生涯系列
- Qt pro文件配置多个子工程/子模块