0

基数ソートを使用して数値のリストをソートするプログラムに取り組んでいますが、無限ループであると思われるものにはまり続けています。それは私のメインのソート機能かカウント機能のどちらかだと思います。私が間違っていることについてのアイデアはありますか?

void radix_sort(DLList& list)
{
  DLList lstRay[10];
  int ct = count(list);
  int zeros = 0;
  int tmp = 0;
  int head = 0;

  for(;ct >= 0; ct--)
  {
      while(!list.isEmpty())
      {
        head = list.deleteHead();
        tmp = head / pow(10, zeros);
        tmp = tmp % 10;
        lstRay[tmp].addToTail(head);
      }
      for(int x = 0; x <=9; x++)
      {
        list.append(lstRay[x]);
      }
      zeros++;   
   }      
}

int count(DLList& list)
{
  int ct = 0;
  int ct2 = 0;
  int tmp = 0;

  while(!list.isEmpty())
  {
      ct = ct2;
      tmp = list.deleteHead();
      while(tmp >= 0)
      {
        tmp = tmp/10;
        ct2++;
      }
      if(ct2 < ct)
      {
        ct2 = ct;
      }
    }
    return ct2;
}
4

2 に答える 2

0

lstRay各反復でクリアしていません。これは、ループを繰り返すと、それぞれlstRayがどんどん長くなるため、リストが指数関数的に大きくなることを意味します。

しかし、それがそこまで進んでいることに驚いています-カウント関数がリストをクリアするようです。

于 2014-04-09T03:41:49.817 に答える
0

無限ループは count() 内にあります。temp がゼロを下回ることはないため、temp のループは決して終了しません。

radix_sort 関数にも問題があります。listRay[tmp] は初期化されていません。

于 2014-04-09T05:07:21.500 に答える