(堆,建立最大堆,最小堆,堆排序函数)
对ISBN号图像进行一系列处理之后,我们要将图像中的ISBN号与背景分离开来,以便于下一步对ISBN号进行分割的处理。对一幅图像进行分割,是利用图像要提取的目标与背景在灰度上的差异,通过设置阈值来将像素级分成若干类,从而实现目标与背景分离。现给定N个灰度级的频数,请你使用冒泡排序或者选择排序对灰度级频数进行排序并找出灰度级频数中最小的值。
输入格式:
输入在第一行给出N(0-255)个灰度级;随后一行输入N个灰度级对应的频数(频数小于256)。
输出格式:
输出灰度级频数排序之后的序列并输出灰度级频数最小的值。
输入样例:
6
3 5 8 6 7 2
输出样例:
2 3 5 6 7 8
灰度级频数最小的值为:2
题解:
#include<iostream>
#include<set> //底层也是平衡二叉搜索树,虽然不是堆,但是它的每项操作也是log(n)级别,也和快
using namespace std;
int main()
{
int n;
cin>>n;
multiset<int> result;
for(int i = 0;i < n;i++){
int x;
cin>>x;
result.insert(x); //插入x,无重复值
}
multiset<int>::iterator it; //迭代器访问
for(it = result.begin();it != result.end();it++){
cout<<(*it)<<" ";
}
cout<<endl;
cout<<"灰度级频数最小的值为:"<<*result.begin();
return 0;
}