数组排序(来自我的百度知道)

来源:互联网 发布:知乎 精华 护肤 编辑:程序博客网 时间:2024/05/16 00:40

 

【提问】

对已知数组a的元素按从小到大的顺序"连续"编号存于数组b, 即a[i]的编号存于b[i]. 要求: 相同的元素具有相同的编号. 例:
数组a为: 7, 6, 3, 7, 7, 8, 3, 3, 0, 7
数组b为: 4, 3, 2, 4, 4, 5, 2, 2, 1, 4

【解答】

//以下代码在vs2005中编译通过,希望大家指正,欢迎大家提出更好的解答!谢谢!

#include<stdio.h>
#define SIZE 10
typedef struct{
    int a; // 记录数组中的元素的值
    int pos; //记录数组中元素的位置
}List;
void paixu(List L[],char mode,int len); //排序 min——max,mode是按照位置还是值排序
int main(int argv,int argc)
{
    //以下a,b并没有(真正意义上的)排序,使用la,lb模拟a,b排序的;
    int a[SIZE]={7,6,3,7,7,8,3,3,0,7};
    int b[SIZE];
    List la[SIZE];
    List lb[SIZE];
    int i=0;
    printf("数组a排序前:");
    for (i=0;i<SIZE;i++)
    {
la[i].a=a[i];
la[i].pos=i;
printf("%d,",a[i]);
    } //将a赋值给la中的a,并用pos记录a中元素在la的位置;
    paixu(la,'a',SIZE);     //模拟a排序
    printf("/n数组a排序后:");
    for (i=0;i<10;i++)
printf("%d,",la[i].a);
    lb[0].a=1;
    lb[0].pos=la[0].pos;
    for (i=1;i<SIZE;i++)
    {
if (la[i].a>la[i-1].a)
     lb[i].a=lb[i-1].a+1;
else
     lb[i].a=lb[i-1].a;
lb[i].pos=la[i].pos;
    }     //计算lb中a的值,即是数组b中元素的值
    printf("/n数组b排序前: ");
     for (i=0;i<SIZE;i++)
printf("%d,",lb[i].a);
    paixu(lb,'p',SIZE);     //模拟b排序
    printf("/n数组b排序后:");
    for (i=0;i<SIZE;i++)
    {
b[i]=lb[i].a;
printf("%d,",b[i]);
    }
    printf("/n");
    return 0;
}
//
void paixu(List l[],char mode,int len)
{
    int i=0;
    int j,tags;
    List temp;
    if (mode=='a')
    {
for (i=0;i<len-1;i++)
{
     tags=1;          //标记是否进行了交换
     for( j=len-1;j>i;j--)
if (l[j].a<l[j-1].a)
{
      temp=l[j];
      l[j]=l[j-1];
      l[j-1]=temp;
      tags=0;             //有交换
}
if (tags) break;   //无交换,退出循环
}
    }
    else if(mode=='p')
    {
for (i=0;i<len-1;i++)
{
     tags=1;
     for( j=len-1;j>i;j--)
if (l[j].pos<l[j-1].pos)
{
      temp=l[j];
      l[j]=l[j-1];
      l[j-1]=temp;
      tags=0;
}
if (tags) break;
}
    }
}

 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - -  - - - - - -

海螺:http://hi.baidu.com/hailuojj

keepingdo:http://hi.csdn.net/keepingdo

联系我:xhl_hylo@foxmail.com

 

原创粉丝点击