其实就是用stl省了一点点代码量。
简单介绍一下:
a[]中不同的数有bn个,在b[]中从小到大排列。
将a[]中的数离散化为1..bn的值
例:
a={7,2,9,1,2};
离散化后:
bn=4;
b={1,2,7,9}
a={3,2,4,1,2}
a、b都从1到n保存。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
using namespace std;
int discret(int a[],int b[],int n){
int bn,i;
for(i=1;i<=n;++i) b[i]=a[i];
sort(b+1,b+n+1);
bn=unique(b+1,b+n+1)-b-1;
for(i=1;i<=n;++i) a[i]=lower_bound(b+1,b+bn+1,a[i])-b;
return bn;
}
int a[50],b[50];
int main(){
int n,i,bn;
srand(10086);
n=5;
printf("origin:\n");
printf("a: size=%d\n",n);
for(i=1;i<=n;++i){
a[i]=(rand()%10);
printf("%d ",a[i]);
}
printf("\n");
bn=discret(a,b,n);
printf("\n\nafter discretization:\n");
printf("b: size=%d\n",bn);
for(i=1;i<=bn;++i) printf("%d ",b[i]);
printf("\na: size=%d\n",n);
for(i=1;i<=n;++i) printf("%d ",a[i]);
printf("\n");
return 0;
}