#include<stdio.h>
#define N 100
typedef struct {
int key;
int flag;
}list;
int delete_same(list a[],int n)
{
int i,j,k=0;
for(i=1;i<n;i++)
{
for(j=i-1;j>=0;j--)
{
if(a[i].key==a[j].key)
{
a[i].flag=0;//标记置为0表示重复
k++;
}
}
}
return(n-k+1);
}
void pailie(list a[],int n,int m)
{
int i,j,k,min;
for(i=1;i<=m;i++)
{
j=0;
k=0;
min=32767;
while(j<n) //每次选择最小值
{
if(a[j].flag==-1&&a[j].key<min)
{
min=a[j].key;//min保存当前最小值
k=j;//k保存当前最小值的位置
}
j++;
}
a[k].flag=i;//排列大小
//printf("%-3d%-3d\n",k,a[k].flag);
}
}
int main()
{
list data[N];
int i,n,m;
printf("输入元素个数,不超过%d:",N);
scanf("%d",&n);
printf("输入数组元素:");
for(i=0;i<n;i++)
{
scanf("%d",&data[i].key);
data[i].flag=-1;
}
m=delete_same(data, n);//m表示当前数组中互不相同的元素个数
printf("序列:");
for(i=0;i<n;i++)
{
if(data[i].flag!=0)
printf("%-3d",data[i].key);
}
printf("\n");
pailie(data,n,m);//做静态链表的标记
printf("编号:");
for(i=0;i<n;i++)
{
if(data[i].flag!=0)
printf("%-3d",data[i].flag);
}
printf("\n");
return(0);
}
倚天照海花无数,流水高山心自知。