Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

รายการเรียงลำดับการแทรก C++


สมมติว่าเรามีรายการที่เชื่อมโยง เราต้องทำการเรียงลำดับการแทรกในรายการนี้ ดังนั้นหากรายการเป็นแบบ [9,45,23,71,80,55] รายการเรียงเป็น [9,23,45,55,71,80]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • dummy :=โหนดใหม่พร้อมค่าสุ่มบางส่วน

  • โหนด :=รายการที่กำหนด

  • ในขณะที่โหนดไม่เป็นโมฆะ

    • newNode =ถัดไปของโหนด dummyHead :=ถัดไปของ dummy prevDummyHead :=ดัมมี่

    • ในขณะที่เป็นจริง -

      • ถ้าไม่มี dummyHead ค่าของ dummyHead> ค่าของโหนด

        • ถัดไปของโหนด :=dummyHead

        • ถัดไปของ prevDummyHead :=โหนด

        • หมดห่วง

      • prevDummyHead :=dymmyHead และ dummyHead =ถัดจากส่วนหัวจำลอง

    • โหนด :=โหนดถัดไป

  • กลับมาต่อจากดัมมี่

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

class Solution {
   public:
   ListNode* insertionSortList(ListNode* a) {
      ListNode* dummy = new ListNode(-1);
      ListNode* node = a;
      ListNode* nextNode;
      ListNode* dummyHead;
      ListNode* prevDummyHead;
      while(node != NULL){
         nextNode = node->next;
         dummyHead = dummy->next;
         prevDummyHead = dummy;
         while(1){
            if(!dummyHead || dummyHead->val > node->val){
               node->next = dummyHead;
               prevDummyHead->next = node;
               //cout << prevDummyHead->val << " " << node->val << endl;
               break;
            }
         }
         prevDummyHead = dummyHead;
         dummyHead = dummyHead->next;
      }
      node = nextNode;
   }
   return dummy->next;
}

อินพุต

[9,45,23,71,80,55]

ผลลัพธ์

[9,23,45,55,71,80]