{"id":4329,"date":"2022-03-19T14:59:15","date_gmt":"2022-03-19T14:59:15","guid":{"rendered":"http:\/\/truelogic.org\/wordpress\/?p=4329"},"modified":"2022-03-19T14:59:16","modified_gmt":"2022-03-19T14:59:16","slug":"doing-a-merge-sort","status":"publish","type":"post","link":"https:\/\/truelogic.org\/wordpress\/2022\/03\/19\/doing-a-merge-sort\/","title":{"rendered":"Doing a Merge Sort"},"content":{"rendered":"\n<p>The code below uses Merge Sort to sort an array of integers<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: java; title: ; notranslate\" title=\"\">\npublic class MergeSort {\n\n   \tprivate int &#x5B;]mArray;\n\tprivate int &#x5B;]mTemp;\n\n\tpublic MergeSort(int &#x5B;]arr) {\n   \t   mTemp = new int&#x5B;arr.length];\n\t   mArray = arr;\n\n\t   divide(0, arr.length-1);\n\n\t   System.out.println(&quot;Final list&quot;);\n\n\t   for(int i: mArray) {\n\t     System.out.print(i +&quot;,&quot;);\n\t   }\n\t   System.out.println(&quot;&quot;);\n   \t}\n\n\tprivate void divide(int low, int high) {\n\t   System.out.println(&quot;divide() - &quot; + low +&quot;,&quot; + high);\n\t   if (low &lt; high) {\n\t   \tint mid = low + ((high-low)\/2);\n\t\tSystem.out.println(&quot;mid=&quot; + mid);\n \t\tdivide(low, mid);\n\t\tdivide(mid+1, high);\n\n\t\tjoin(low, mid, high);\n\t   }\n\t}\n\n\tprivate void join(int low, int mid, int high) {\n\t    System.out.println(&quot;join() - &quot; + low + &quot;,&quot; + mid + &quot;,&quot; + high);\n\n\t    \/\/copy all values to temp array\n\t    for(int i =low; i &lt;= high; i++) {\n\t       mTemp&#x5B;i] = mArray&#x5B;i];\n\t       System.out.print(mTemp&#x5B;i] + &quot;,&quot;);\n\t    }\n\n\t    System.out.println(&quot;&quot;);\n\t    \/\/divide array into two parts from mid point\n\t    int leftCounter = low;\n\t    int rightCounter = mid+1;\n\t    int mainCounter = low;\n\n\t    \/\/compare number in left side to number in right side. \n\t    \/\/ Move lower number to the main array\n\t    while (leftCounter &lt;= mid &amp;&amp; rightCounter &lt;= high) {\n\t\tSystem.out.println(&quot;comparing &quot; + mTemp&#x5B;leftCounter] + &quot; to &quot; + mTemp&#x5B;rightCounter]);\n\t        if (mTemp&#x5B;leftCounter] &lt;= mTemp&#x5B;rightCounter]) {\n\t\t   mArray&#x5B;mainCounter] = mTemp&#x5B;leftCounter];\n\t\t   leftCounter++;\n\t\t} else {\n\t\t   mArray&#x5B;mainCounter] = mTemp&#x5B;rightCounter];\n\t\t   rightCounter ++;\n\t\t}\n\t\tmainCounter ++;\n\t    }\n\n\t    System.out.println(&quot;Appending remaining numbers from left side&quot;);\n\t    \/\/append remaining numbers in left side to main array\n\t    while (leftCounter &lt;= mid) {\n\t       mArray&#x5B;mainCounter] = mTemp&#x5B;leftCounter];\n\t       System.out.println(mArray&#x5B;mainCounter]);\n\t       leftCounter ++;\n\t       mainCounter ++;\n\t    }\n\n\t    System.out.println(&quot;At end of join()&quot;);\n\t     for(int i =low; i &lt;= high; i++) {\n\t       System.out.print(mArray&#x5B;i] + &quot;,&quot;);\n\t    }\n\t    System.out.println(&quot;&quot;);\n\n\t}\n\n   public static void main(String &#x5B;]args) {\n      int &#x5B;] nums = {6,78,19,54,32,-9,-10,87,12,31};\n\n      for(int i: nums) {\n         System.out.print(i +&quot;,&quot;);\n      }\n      System.out.println(&quot;&quot;);\n      MergeSort m = new MergeSort(nums);\n   }\n}\n\n<\/pre><\/div>\n\n\n<p>The output is shown below<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">6,78,19,54,32,-9,-10,87,12,31,\n divide() - 0,9\n mid=4\n divide() - 0,4\n mid=2\n divide() - 0,2\n mid=1\n divide() - 0,1\n mid=0\n divide() - 0,0\n divide() - 1,1\n join() - 0,0,1\n 6,78,\n comparing 6 to 78\n Appending remaining numbers from left side\n At end of join()\n 6,78,\n divide() - 2,2\n join() - 0,1,2\n 6,78,19,\n comparing 6 to 19\n comparing 78 to 19\n Appending remaining numbers from left side\n 78\n At end of join()\n 6,19,78,\n divide() - 3,4\n mid=3\n divide() - 3,3\n divide() - 4,4\n join() - 3,3,4\n 54,32,\n comparing 54 to 32\n Appending remaining numbers from left side\n 54\n At end of join()\n 32,54,\n join() - 0,2,4\n 6,19,78,32,54,\n comparing 6 to 32\n comparing 19 to 32\n comparing 78 to 32\n comparing 78 to 54\n Appending remaining numbers from left side\n 78\n At end of join()\n 6,19,32,54,78,\n divide() - 5,9\n mid=7\n divide() - 5,7\n mid=6\n divide() - 5,6\n mid=5\n divide() - 5,5\n divide() - 6,6\n join() - 5,5,6\n -9,-10,\n comparing -9 to -10\n Appending remaining numbers from left side\n -9\n At end of join()\n -10,-9,\n divide() - 7,7\n join() - 5,6,7\n -10,-9,87,\n comparing -10 to 87\n comparing -9 to 87\n Appending remaining numbers from left side\n At end of join()\n -10,-9,87,\n divide() - 8,9\n mid=8\n divide() - 8,8\n divide() - 9,9\n join() - 8,8,9\n 12,31,\n comparing 12 to 31\n Appending remaining numbers from left side\n At end of join()\n 12,31,\n join() - 5,7,9\n -10,-9,87,12,31,\n comparing -10 to 12\n comparing -9 to 12\n comparing 87 to 12\n comparing 87 to 31\n Appending remaining numbers from left side\n 87\n At end of join()\n -10,-9,12,31,87,\n join() - 0,4,9\n 6,19,32,54,78,-10,-9,12,31,87,\n comparing 6 to -10\n comparing 6 to -9\n comparing 6 to 12\n comparing 19 to 12\n comparing 19 to 31\n comparing 32 to 31\n comparing 32 to 87\n comparing 54 to 87\n comparing 78 to 87\n Appending remaining numbers from left side\n At end of join()\n -10,-9,6,12,19,31,32,54,78,87,\n Final list\n -10,-9,6,12,19,31,32,54,78,87,<\/pre>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>The code below uses Merge Sort to sort an array of integers The output is shown below 6,78,19,54,32,-9,-10,87,12,31, divide() &#8211; 0,9 mid=4 divide() &#8211; 0,4 <a class=\"mh-excerpt-more\" href=\"https:\/\/truelogic.org\/wordpress\/2022\/03\/19\/doing-a-merge-sort\/\" title=\"Doing a Merge Sort\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":4308,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[366,319],"tags":[],"class_list":["post-4329","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-computer-science","category-java"],"_links":{"self":[{"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/posts\/4329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/comments?post=4329"}],"version-history":[{"count":1,"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/posts\/4329\/revisions"}],"predecessor-version":[{"id":4330,"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/posts\/4329\/revisions\/4330"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/media\/4308"}],"wp:attachment":[{"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/media?parent=4329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/categories?post=4329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/truelogic.org\/wordpress\/wp-json\/wp\/v2\/tags?post=4329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}