簡體   English   中英

使用雙向鏈表的C ++基數排序

[英]C++ radix sort using doubly-linked list

我正在開發一個使用基數排序對數字列表進行排序的程序,但是我一直陷於我認為是無限循環的問題。 我認為它要么是我的主要排序功能,要么是我的計數功能。 關於我在做什么錯的任何想法嗎?

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

您不會在每次迭代中清除lstRay 這意味着當您再次循環時,每個lstRay會越來越長,因此您的列表呈指數增長。

但是,我感到驚訝的是它走得太遠了-看來您的count函數將清除列表。

無限循環在count()內部。 temp上的循環永遠不會終止,因為temp永遠不會低於零。

radix_sort函數也有問題。 listRay [tmp]未初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM