C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

挿入ソートリストC++


リンクリストがあるとすると、このリストに対して挿入ソートを実行する必要があります。したがって、リストが[9,45,23,71,80,55]のような場合、ソートされたリストは[9,23,45,55,71,80]になります。

これを解決するには、次の手順に従います-

  • ダミー:=ランダムな値を持つ新しいノード

  • ノード:=指定されたリスト

  • ノードがnullでない間、

    • newNode =ノードの次、dummyHead:=ダミーの次、prevDummyHead:=ダミー

    • 真の間に-

      • ダミーヘッドが存在しない場合、ダミーヘッドの値>ノードの値

        • ノードの次:=ダミーヘッド

        • prevDummyHeadの次:=ノード

        • ループを壊す

      • prevDummyHead:=dymmyHead、dummyHead=ダミーヘッドの次

    • node:=nextNode

  • ダミーの次を返す

理解を深めるために、次の実装を見てみましょう-

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]

  1. C++でマルチレベルリンクリストをフラット化する

    この問題では、マルチレベルのリンクリストが提供されます。私たちの仕事は、マルチレベルのリンクリストをフラット化するプログラムを作成することです。 平坦化操作は、リンクリストで最初に第1レベルのノードが発生し、次に第2レベルのノードが発生するように実行されます。 マルチレベルリンクリスト は多次元データ構造であり、リンクリストのすべてのノードに2つのリンクポインタがあります。1つは次のノードへのリンクで、もう1つは1つ以上のノードを持つ子リストへのリンクです。この子ポインタは、他のリストノードを指している場合とそうでない場合があります。 例 問題を理解するために例を見てみましょう

  2. C#での挿入ソート

    挿入ソートは、一度に要素を取得し、それを配列内の正しい位置に挿入するソートアルゴリズムです。このプロセスは、配列がソートされるまで続けられます。 C#での挿入ソートを示すプログラムは次のとおりです。 例 using System; namespace InsertionSortDemo {    class Example {       static void Main(string[] args) {          int[] arr = new int[10] { 23, 9, 85