您的位置:首页 > 其它

位图排序

2016-01-19 22:19 148 查看
在《编程珠玑》上看到的,开篇第一个问题,有很多数,小于一个MAXNUM,没有重复的,怎么排序最快。

答案是位图排序. 如果某一位不为0,那么这一位存代表一个数,位数(在序列中的位置)代表这个数。

比方说这些数都存在数组a,然后利用一个数组b,b初始状态各位都为0,然后读取a,如果a[1]=2,那么b[2]为1,a[3]=6,那么b[6]=1。

实现如下:

#include <iostream>
#include <fstream>
#include<stdlib.h>
#include<vector>
#define MAXNUM 200
int Isood(int n);

using namespace std;

int main(void)
{
vector<int> v1,v2;
int n;
cin>>n;
int m;
m=MAXNUM;
while(n)
{
int t;
cin>>t;
v1.push_back(t);
n--;
}

while(m)
{
v2.push_back(0);
m--;
}

for(int i=0;i<v1.size();i++)
{
v2[v1[i]-1]=1;
}

for(int i=0;i<v2.size();i++)
{
if(v2[i])
{
cout<<i+1;+
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: