簡體   English   中英

在C ++中使用氣泡排序對鏈接列表進行排序

[英]Sorting linked list with bubble sort in c++

我一直在嘗試使用交換功能對一個雙向鏈表進行冒泡排序。 我的問題是交換函數是否交換指針,而不僅僅是數據? 我的代碼向我展示了它僅交換數據,而不交換指針。 有什么方法可以有效地交換鏈接列表上的指針嗎? 請告訴我代碼,因為我在編碼方面經驗不足,並且我不理解其他答案中的其他代碼。

void sortPoly(PolyNode* a)
{
  PolyNode* head =a;
  PolyNode* current = head;
  PolyNode* current_next = current->next;


  int len =Polylength(current);

  if(len ==1 || len ==0)
   {
      return;
   }

for(int i =0; i < len; i++)
{
    for (int j =0; j< len -i; j++)
    {
        int sum = current->expx + current->expy;
        cout << "sum=" << sum << endl;
        int next_sum = current_next->expx + current_next->expy;
         cout << "\t nextsum=" << next_sum << endl;

        if( sum < next_sum)
        {
            cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
            cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;

            std:: swap(current, current_next);
            cout << endl;
            cout << "swapped" << endl;

            cout << "current=" << current->coef << "expx = " <<    current->expx << "expy=" << current->expy << endl;
            cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;

           cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
           cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;

        current = current->next;

        current_next = current->next->next;
        cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
        cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;
    }
   }

 }

這是我的結構:

    struct PolyNode
    {
      int coef;
      int expx;
      int expy;
      PolyNode* prev;
      PolyNode* next;
     };

請在Mac終端上找到以下我的回復。 輸入結果a = xy + 5-2x ^ 6 + 7x ^ 4y ^ 2 + 5x ^ 2-y ^ 2,b = y-x + 5

我認為您可能在交換功能上有問題。 我不認為std :: swap也可以交換上一個和下一個參考。 當然,您可以實現自己的交換。 我會用這個功能做到這一點。

void swap(PolyNode* node1, PolyNode* node2){
PolyNode* prev = node1->prev;
PolyNode* next = node2->next;
if (prev)
    prev->next = node2;
if (next)
    next->prev = node1;

node1->next = next;
node1->prev = node2;

node2->prev = prev;
node2->next = node1;
}

順便說一句,您必須將迭代移出if。

current = current->next;
current_next = current->next->next;

if

暫無
暫無

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

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