zoukankan      html  css  js  c++  java
  • 基数排序

    基数排序的C语言描述:

    #include<stdio.h>
    typedef struct
    {
      int num;
      int next;
    }slcell;         //静态链表的结点类型
    #define M 10
    int f[M];
    int e[M];
    int head=0;
    void distribute(slcell *a,int w)
    {
      int i;
      int last;
      for(i=0;i<10;i++)
       f[i]=-1;
      for(i=head;i!=-1;i=a[i].next)
      {
        last=(a[i].num/w)%10;
        if(f[last]==-1)
     f[last]=i;
     else
     a[e[last]].next=i;
     
     e[last]=i;
      }  

    }             

    //某一次排序

    void collect(slcell *a)
    {
      int i;
      int l = -1;
        for (i=0; i<10; i++)
            if (f[i] != -1)
      {
                if (l == -1)
                    head = f[i];
                else
                    a[l].next = f[i];
                    l = e[i];
            }
     a[l].next = -1;
    }                  

    //将排序好的数组恢复成静态链表
    void Output(slcell *a, int head)
    {
        while (head != -1) {
            printf("%4d", a[head].num);
            head = a[head].next;
        }
        printf("\n");
    }                       

    //输出静态链表中的值
    void main()
    {
     int i,max,k=1;
     slcell a[M];
     printf("请依次输入%d个整数\n",M);
     printf("请输入第1个数:");
     scanf("%d",&a[0].num);
     a[0].next=1;
     max=a[0].num;
     for(i=1;i<M;i++)
     {
     printf("请输入第%d个数:",i+1);
        scanf("%d",&a[i].num);
     a[i].next=i+1;
     if(max<a[i].num)
      max=a[i].num;
     }
        a[M-1].next=-1;
     for(i=1;i<max;i=i*10)
     {
      distribute(a,i);
      collect(a);
      printf("第%d排序的结果是:\n",k);
      Output(a,head);
      k++;
     }
      }

  • 相关阅读:
    NEON中的L可以避免溢出
    编译Qualcomm的Hexagon exampls错误
    C语言中的static
    在非NDK编译条件下使用Android Log函数
    NEON的vsub方法溢出
    OpenCL中读取image时的坐标
    Ubuntu16.0 GTX1660Ti 安装NVIDIA CUDA cuDNN Tensflow
    修改so库中的依赖名
    Qt数据库总结
    Qt插件系统
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/1965609.html
Copyright © 2011-2022 走看看