{"id":547,"date":"2013-08-07T16:34:38","date_gmt":"2013-08-07T23:34:38","guid":{"rendered":"http:\/\/192.168.1.2\/wordpress\/?p=547"},"modified":"2021-04-04T23:10:36","modified_gmt":"2021-04-05T06:10:36","slug":"sorting-bubble-sort","status":"publish","type":"post","link":"http:\/\/cywang.no-ip.org\/wordpress\/?p=547","title":{"rendered":"Sorting &#8211; Bubble Sort"},"content":{"rendered":"<p>Time complexity:<\/p>\n<p>Worst-case: \\(O(n^2)\\)<\/p>\n<p>Best-case: \\(O(n)\\)<\/p>\n<p>Average-case: \\(O(n^2)\\)<\/p>\n<p>Sort array elements in ascending order. If the first element is greater than the second element, swap the first two elements.<\/p>\n<p>Then, we go to the &#8220;next pair&#8221; and so on.<\/p>\n<p><!--more--><\/p>\n<pre class=\"brush:cpp;\">void BubbleSort(int *list, int size)\r\n{\r\n    int i, j, swapCount = 0, runningCount = 0, isSwapped = 0;\r\n    for(i=0;i&lt;size;i++)\r\n    {\r\n        isSwapped = 0;\r\n        for(j=0;j&lt;size-i-1;j++)\r\n        {\r\n            runningCount++;\r\n            if(list[j] &gt; list[j+1])\r\n            {\r\n                swap(&amp;list[j], &amp;list[j+1]);\r\n                swapCount++;\r\n                isSwapped++;\r\n            }\r\n        }\r\n        if(isSwapped == 0)\r\n            break;\r\n    }\r\n}\r\n\r\nvoid swap(int *x, int *y)\r\n{\r\n    int tmp = *x;\r\n    *x = *y;\r\n    *y = tmp;\r\n}<\/pre>\n<p>For example, to sort an array of size 7.<\/p>\n<p><strong>Case I: Worst-case<\/strong><\/p>\n<pre class=\"brush:cpp;\">int worstList[] = {23,20,18,14,10,6,3};<\/pre>\n<p>swapCount = 21 and runningCount =\u00a021<\/p>\n<p style=\"font-size: 13px;\"><strong>Case II: Best-case<\/strong><\/p>\n<pre class=\"brush:cpp;\" style=\"font-size: 13px;\">int bestList[] = {3, 6, 10, 14, 18, 20, 23};<\/pre>\n<p style=\"font-size: 13px;\">swapCount = 0 and runningCount =\u00a06<\/p>\n<p style=\"font-size: 13px;\"><strong>Case III: Average-case<\/strong><\/p>\n<pre class=\"brush:cpp;\" style=\"font-size: 13px;\">int averageList[] = {20, 6, 23, 3, 18, 14, 10};<\/pre>\n<p style=\"font-size: 13px;\">swapCount = 13 and runningCount =\u00a020<\/p>\n<p>&nbsp;<\/p>\n<p>Unsorted Array: 20, 6, 23, 3, 18, 14, 10<\/p>\n<p><span style=\"font-size: 13px;\">Step01<\/span>. (<span style=\"font-size: 13px;\">20, 6), 23, 3, 18, 14, 10 \u00a0-&gt;\u00a0\u00a0(6, 20), 23, 3, 18, 14, 10<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step02.\u00a06, (20, 23), 3, 18, 14, 10\u00a0\u00a0-&gt; \u00a0without swapping<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step03.\u00a0<\/span><span style=\"font-size: 13px;\">6, 20<\/span><span style=\"font-size: 13px;\">, (23, 3), 18, 14, 10<\/span><span style=\"font-size: 13px;\">\u00a0\u00a0-&gt; \u00a06, 20, (3, 23), 18, 14, 10<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step04.\u00a0<\/span><span style=\"font-size: 13px;\">6,\u00a020<\/span><span style=\"font-size: 13px;\">, 3, (23, 18), 14, 10<\/span><span style=\"font-size: 13px;\">\u00a0\u00a0-&gt; \u00a06, 20, 3, (18, 23), 14, 10<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step05.\u00a0<\/span><span style=\"font-size: 13px;\">6,\u00a020<\/span><span style=\"font-size: 13px;\">, 3, 18, (23, 14), 10<\/span><span style=\"font-size: 13px;\">\u00a0\u00a0-&gt; \u00a06, 20,\u00a03, 18, (14, 23), 10<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step06.\u00a0<\/span><span style=\"font-size: 13px;\">6,\u00a020<\/span><span style=\"font-size: 13px;\">, 3, 18, 14, (23, 10)<\/span><span style=\"font-size: 13px;\">\u00a0\u00a0-&gt; \u00a06, 20,\u00a03,\u00a018, 14, (10, <span style=\"color: #ff0000;\">23<\/span>)<\/span><\/p>\n<p><span style=\"font-size: 13px;\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step07. (<\/span><span style=\"font-size: 13px;\">6,\u00a020)<\/span><span style=\"font-size: 13px;\">, 3, 18,\u00a014, 10, <span style=\"color: #ff0000;\">23<\/span><\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a0without swapping<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step08. <\/span><span style=\"font-size: 13px;\">6, (20<\/span><span style=\"font-size: 13px;\">, 3), 18,\u00a014, 10,\u00a0<span style=\"color: #ff0000;\">23<\/span>\u00a0 -&gt; \u00a06, (3<\/span><span style=\"font-size: 13px;\">, 20), 18,\u00a014, 10,\u00a0<span style=\"color: #ff0000;\">23<\/span><\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step09.\u00a0<\/span><span style=\"font-size: 13px;\">6, <\/span><span style=\"font-size: 13px;\">3, (20, 18),\u00a014, 10,\u00a0<span style=\"color: #ff0000;\">23<\/span>\u00a0 -&gt; \u00a06, 3<\/span><span style=\"font-size: 13px;\">, (18, 20),\u00a014, 10,\u00a0<span style=\"color: #ff0000;\">23<\/span><\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step10.\u00a06,\u00a03<\/span><span style=\"font-size: 13px;\">, 18, (20,\u00a014), 10,\u00a0<span style=\"color: #ff0000;\">23<\/span>\u00a0 -&gt; \u00a06, 3, 18, (14, 20), 10,\u00a0<span style=\"color: #ff0000;\">23<\/span><\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step11.\u00a06,\u00a0<\/span><span style=\"font-size: 13px;\">3<\/span><span style=\"font-size: 13px;\">, 18<\/span><span style=\"font-size: 13px;\">, 14, (20, 10),\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a06,\u00a0<\/span><span style=\"font-size: 13px;\">3<\/span><span style=\"font-size: 13px;\">, 18<\/span><span style=\"font-size: 13px;\">,\u00a014, (10, <span style=\"color: #ff0000;\">20<\/span>),\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><\/p>\n<p><span style=\"font-size: 13px;\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/span><span style=\"font-size: 13px; color: #ff0000;\">\u200b<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step12. (6,\u00a0<\/span><span style=\"font-size: 13px;\">3)<\/span><span style=\"font-size: 13px;\">, 18<\/span><span style=\"font-size: 13px;\">,\u00a014, 10, <span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a0(3,\u00a0<\/span><span style=\"font-size: 13px;\">6)<\/span><span style=\"font-size: 13px;\">, 18<\/span><span style=\"font-size: 13px;\">,\u00a014,\u00a010,\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step13.\u00a03, (<\/span><span style=\"font-size: 13px;\">6<\/span><span style=\"font-size: 13px;\">, 18)<\/span><span style=\"font-size: 13px;\">,\u00a014,\u00a010,\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a0without swapping<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step14.\u00a03, <\/span><span style=\"font-size: 13px;\">6<\/span><span style=\"font-size: 13px;\">, (18<\/span><span style=\"font-size: 13px;\">,\u00a014),\u00a010,\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a03,\u00a0<\/span><span style=\"font-size: 13px;\">6<\/span><span style=\"font-size: 13px;\">, (14<\/span><span style=\"font-size: 13px;\">,\u00a018),\u00a010,\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step15.\u00a03,\u00a0<\/span><span style=\"font-size: 13px;\">6<\/span><span style=\"font-size: 13px;\">, 14<\/span><span style=\"font-size: 13px;\">, (18,\u00a010),\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a03,\u00a0<\/span><span style=\"font-size: 13px;\">6<\/span><span style=\"font-size: 13px;\">,\u00a014<\/span><span style=\"font-size: 13px;\">, (10,\u00a0<span style=\"color: #ff0000;\">18<\/span>),\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><\/p>\n<p><span style=\"font-size: 13px;\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/span><span style=\"font-size: 13px; color: #ff0000;\">\u200b<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step16. (3,\u00a0<\/span><span style=\"font-size: 13px;\">6)<\/span><span style=\"font-size: 13px;\">,\u00a014<\/span><span style=\"font-size: 13px;\">, 10,\u00a0<span style=\"color: #ff0000;\">18<\/span>,\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a0without swapping<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step17. 3, (<\/span><span style=\"font-size: 13px;\">6<\/span><span style=\"font-size: 13px;\">,\u00a014)<\/span><span style=\"font-size: 13px;\">,\u00a010,\u00a0<span style=\"color: #ff0000;\">18<\/span>,\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a0without swapping<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step18.\u00a03, <\/span><span style=\"font-size: 13px;\">6<\/span><span style=\"font-size: 13px;\">, (14<\/span><span style=\"font-size: 13px;\">,\u00a010),\u00a0<span style=\"color: #ff0000;\">18<\/span>,\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a03,\u00a0<\/span><span style=\"font-size: 13px;\">6<\/span><span style=\"font-size: 13px;\">, (10<\/span><span style=\"font-size: 13px;\">,\u00a0<span style=\"color: #ff0000;\">14<\/span>),\u00a0<span style=\"color: #ff0000;\">18<\/span>,\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><\/p>\n<p><span style=\"font-size: 13px;\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/span><span style=\"font-size: 13px; color: #ff0000;\">\u200b<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step19. (3,\u00a0<\/span><span style=\"font-size: 13px;\">6)<\/span><span style=\"font-size: 13px;\">, 10<\/span><span style=\"font-size: 13px;\">,\u00a0<span style=\"color: #ff0000;\">14<\/span>,\u00a0<span style=\"color: #ff0000;\">18<\/span>,\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a0without swapping<\/span><\/p>\n<p><span style=\"font-size: 13px;\">Step20. 3, (<\/span><span style=\"font-size: 13px;\">6<\/span><span style=\"font-size: 13px;\">,\u00a0<span style=\"color: #ff0000;\">10<\/span>)<\/span><span style=\"font-size: 13px;\">,\u00a0<span style=\"color: #ff0000;\">14<\/span>,\u00a0<span style=\"color: #ff0000;\">18<\/span>,\u00a0<span style=\"color: #ff0000;\">20<\/span>,\u00a0<\/span><span style=\"font-size: 13px; color: #ff0000;\">23<\/span><span style=\"font-size: 13px;\">\u00a0 -&gt; \u00a0without swapping -&gt; Break!!<\/span><\/p>\n<p><span style=\"font-size: 13px;\">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<span style=\"color: #000000;\">&#8211;<\/span><\/span><span style=\"color: #000000;\"><span style=\"font-size: 13px;\">\u200b<\/span><\/span><\/p>\n<p><span style=\"color: #000000;\"><span style=\"font-size: 13px;\">Sorted Array: 3, 6, 10, 14, 18, 20, 23\u00a0<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p>Python:<\/p>\n<pre class=\"brush:python;\">def BubbleSort(data):\r\n   data_len = len(data)\r\n   print(\"Data Length: \",data_len)\r\n   for i in range(0,data_len):\r\n      swapped = 0;\r\n      for j in range(0,data_len-i-1):\r\n         if data[j] &gt; data[j+1]:\r\n            tmp = data[j]\r\n            data[j] = data[j+1]\r\n            data[j+1] = tmp\r\n            swapped += 1;\r\n      if swapped == 0:\r\n         break;<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Time complexity: Worst-case: Best-case: Average-case: Sort array elements in ascending order. If the first element is greater than the second element, swap the first two elements. Then, we go to the &#8220;next pair&#8221; and so on.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[24,21],"tags":[],"class_list":["post-547","post","type-post","status-publish","format-standard","hentry","category-chapter-11-sorting-and-searching","category-data-structures-and-algorithms"],"_links":{"self":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=547"}],"version-history":[{"count":6,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/547\/revisions"}],"predecessor-version":[{"id":862,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/547\/revisions\/862"}],"wp:attachment":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=547"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}