zoukankan      html  css  js  c++  java
  • C++箱子排序

    箱子排序

    实现

    把每个箱子用一个链表实现。在进行节点分配之前,每个箱子都是空的。

    基本思想

    1.从与排序链表的头部开始,逐个删除节点,并把它放到合适的箱子链表的头部
    2.收集并连接每个箱子中的节点,产生有序的链表
    

    两种实现

    第一种实现:

    只使用一个箱子数组

    //range 是分数的范围
    void BinSort(Chain<Node>& X,int range)
    {//按分数排序
      int len = X.Length();
      Node x;
      Chain<Node> *bin;//bin是所有的箱子
      bin = new Chain<Node> [range + 1];
      //分配到每个箱子中
      for (int i = 1;i<=len;i++)
      {
          X.Delete(1,x);
          bin[x.score].Insert(0,x);
      }
      //从箱子中收集各元素(从后向前收集)
      for (int j = range;j >= 0;j--)
      {
          while (!bin[j].Empty())
          {
              bin[j].Delete(1,x);
              X.Insert(0,x);
          }
      }
      delete [] bin;
    }
    

    第二种实现

    直接写成Chain的成员函数,使用两个箱子数组,一个指向头,一个指向尾。

    template <class T>
    void Chain<T>::BinSort(int range)
    {//按分数排序
      int b;//箱子索引号
      bottom = new ChainNode<T>* [range +1];
      top = new ChainNode<T> * [range +1];
      for (b=0;b<=range;b++)//初始化
      {
          bottom[b] = 0;
      }
      //把节点分配到各个箱子中
      for (; first;first = first.link)//添加到箱子中
      {
          b = first.data;
          if (bottom[b])//箱子非空
          {
              top[b].link = first;
              top[b] = first;
          }
          else //箱子为空
            bottom[b] = top[b] = first;
      }
      //收集各箱子中的元素
      ChainNode<T> *y =0;//暂存箱子的顶部指针
      for (b=0;b<=range;b++)
      {
          if (bottom[b])//箱子非空
          {
              if(y)//不是第一个非空的箱子
              {
                  y.link = bottom[b];
              }
              else//第一个非空的箱子
                  first = bottomo[b];
              y = top[b];
          }
      }
      if (y) y.link = 0;
      delete [] top;
      delete [] bottom;
    }
    
  • 相关阅读:
    sc 使用
    sql端点应用
    今天面试笔试了一道SQL面试题,狠简单
    指定域的名称或安全标识SID与该域的信任信息不一致
    查询登陆时间间隔不超过5分钟的所有记录
    sql打开xls
    Android控件开发
    android开发1【转】网络设备状态检测
    google.maps Simple Polylines
    Notification 使用详解(很全
  • 原文地址:https://www.cnblogs.com/ttxs69/p/10151518.html
Copyright © 2011-2022 走看看