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++;
     }
      }

  • 相关阅读:
    函数防抖与函数节流 封装好的debounce和throttle函数
    机顶盒
    getchar() putchar()
    【整】char、varchar、nchar、nvarchar的区别
    主机名
    主机
    java中的匿名内部类总结
    智能路由器又多一个玩家——乐视TV
    乐视开始折腾路由器,小米与极路由还会好过吗?
    带你认识什么是路由器
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/1965609.html
Copyright © 2011-2022 走看看