且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

几种常用的排序算法之JavaScript实现

更新时间:2022-09-07 12:35:23

文章目录

插入排序

</div><div data-lake-id="28009970630cca8350884da655f57515">/*</div><div data-lake-id="4a22be15ddaac936f16c748cf05a09b5">1)算法简介</div><div data-lake-id="c493af4a73bcdd4833d80e9e80bb260e">插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。</div><div data-lake-id="e1c52f956dd3c75f3995f86ccfffa8bc">2)算法描述和实现</div><div data-lake-id="088915484c3c4a8dcd8d7f28bc22d4b2">一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:</div><div data-lake-id="14fb2481369fa3ba29ccae09394d0551">从第一个元素开始,该元素可以认为已经被排序;</div><div data-lake-id="d283fb8c4c1d4b9f065c8084868a03f6">取出下一个元素,在已经排序的元素序列中从后向前扫描;</div><div data-lake-id="fbefc6a34e519b428419fca55ee913bf">如果该元素(已排序)大于新元素,将该元素移到下一位置;</div><div data-lake-id="fadf400ab5d94799983c6293212b4de7">重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;</div><div data-lake-id="edcb314373c14566875277ad055e470a">将新元素插入到该位置后;</div><div data-lake-id="434db88a22a13e856f6023be4b2739a6">重复步骤2~5。</div><div data-lake-id="1970a6f52b7fc85d8340412192cfc634">3)算法分析</div><div data-lake-id="aebbc3dbec3eb4bc0bfb4b37ac4e8d63">***情况:输入数组按升序排列。T(n) = O(n)</div><div data-lake-id="8b338e517f9a5258d7aa6fb17b24769b">最坏情况:输入数组按降序排列。T(n) = O(n2)</div><div data-lake-id="eba0e7518da3ffb6c3302ea5b8cf586c">平均情况:T(n) = O(n2)</div><div data-lake-id="2c6647849c6c17c33e8429e2714e150b">*/</div><div data-lake-id="5b0774b68521e65d0bdfa526d4170495">function insertionSort(array) {</div><div data-lake-id="2b573251c705110abb72a2a82f98716d"> if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {</div><div data-lake-id="7f1d96e997b0bc0a728298172186d62b">  for (var i = 1; i < array.length; i++) {</div><div data-lake-id="9a45528c42cfd093e3d76e8e007824ba">   var key = array[i];</div><div data-lake-id="46ca89ba4dedeb701a5e71fc7778bb55">   var j = i - 1;</div><div data-lake-id="d2e41f5cd68a0cd28f44f88405133647">   while (j >= 0 && array[j] > key) {</div><div data-lake-id="2d02129bbd3063138418ad1b66c98f41">    array[j + 1] = array[j];</div><div data-lake-id="a9c01b52a64b5d8b178dfbd3e0e681ee">    j--;</div><div data-lake-id="e5cd01e05816491f6f595907f19f7c48">   }</div><div data-lake-id="1dbec372f2e3aa05a11c73770d474ca6">   array[j + 1] = key;</div><div data-lake-id="ce75a9cc05107878e851afe01e645009">  }</div><div data-lake-id="646511987c16526366d9b0786b49f414"> return array;</div><div data-lake-id="06d59bc0c63df6852978ab1ab1adf4ae"> }  </div><div data-lake-id="eb40ee3917440f84d10fe550478bb25c"> else {</div><div data-lake-id="3691c301f52978625dfde279b463374f">  return 'array is not an Array!';</div><div data-lake-id="980e4923e0d8de358356a31b887f9f8a"> }</div><div data-lake-id="6bf61f7e94a56167ee10a682dfd1fc26">}</div><div data-lake-id="93b370e5e5e598c19745b388172a255f">var a = [1,4,2,5,3];</div><div data-lake-id="49a1e9d91893b0ef46ed97b1e7565c77">var result = insertionSort(a);</div><div data-lake-id="e7626bc6f5da4ddee54ca4519ac1eacb">debugger;</div><div data-lake-id="749e6b747c48ee5212d4879b963402cb">

二分插入排序

</div><div data-lake-id="4ed6b62eafcfb996beeb2adbfd46a7f0">/*</div><div data-lake-id="fccc09467351edc4ee1b5dd7ea9f9832">1)算法简介</div><div data-lake-id="50d541fa6de8528aea8175623c4bc867">二分插入(Binary-insert-sort)排序是一种在直接插入排序算法上进行小改动的排序算法。其与直接插入排序算法最大的区别在于查找插入位置时使用的是二分查找的方式,在速度上有一定提升。</div><div data-lake-id="6e72b48b968ce7eb9deb467f9958f7ec">2)算法描述和实现</div><div data-lake-id="28d3eadd1b78883667c8032a565a0a36">一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:</div><div data-lake-id="a41fe620a5aa5a5b84a60d18e23dae85">从第一个元素开始,该元素可以认为已经被排序;</div><div data-lake-id="f4ca14a0030174a0e13813edaa7cf6dc">取出下一个元素,在已经排序的元素序列中二分查找到第一个比它大的数的位置;</div><div data-lake-id="ce7551f2e3fd25f06906df782d9184f0">将新元素插入到该位置后;</div><div data-lake-id="3ff2a195577defbcc8fbdfb5cda51769">重复上述两步。</div><div data-lake-id="8b9697ab50c45ae811d62f6ddae2b1f0">3)算法分析</div><div data-lake-id="aec9ff92dcb6d9a915bf691c1ad0fd85">***情况:T(n) = O(nlogn)</div><div data-lake-id="33f393dda6936958788fb66e151c8011">最差情况:T(n) = O(n2)</div><div data-lake-id="a3613b0a10daf3aa7ae3c4694defaa97">平均情况:T(n) = O(n2)</div><div data-lake-id="d4d6dbd8327d06077464237eadda96ef">*/</div><div data-lake-id="d4fa493b8031a0c7848891e8f40220ff">function binaryInsertionSort(array) {</div><div data-lake-id="1d342af1eccbdbaf430865935888f61e"> if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {</div><div data-lake-id="2b43a25da449606eef094b34cae8a3f5">  for (var i = 1; i < array.length; i++) {</div><div data-lake-id="e8758b72c5b79ed27e3d09d519516c49">   var key = array[i], left = 0, right = i - 1;</div><div data-lake-id="ea6f836dedc5e344c61e3f85f4d32aa0">   while (left <= right) {</div><div data-lake-id="b5618955130d12fdd76f3cb0f53fd240">    var middle = parseInt((left + right) / 2);</div><div data-lake-id="5f0451a2aaf5c6b7cd5b2386b658115f">    if (key < array[middle]) {</div><div data-lake-id="1d4fa80e1a408356d86e93645582e0a1">     right = middle - 1;</div><div data-lake-id="5fcef9c7cff6898d6c8fdd6aee3b6a11">    }  </div><div data-lake-id="f5dd457cec9c03ade613581c30790253">    else {</div><div data-lake-id="50cc6b602b1e79e9def0d7491871e8ec">     left = middle + 1;</div><div data-lake-id="61b55b635a6bd9cdca55c22bfcc4391f">    }</div><div data-lake-id="20aed91ee605f6487d5a3113e7a8a5f8">   }</div><div data-lake-id="7194618853044e11c27ef45e82d28545">   for (var j = i - 1; j >= left; j--) {</div><div data-lake-id="5ffe7fd19ea3088a11f48b2d2373a177">    array[j + 1] = array[j];</div><div data-lake-id="18565b974ef2161b782293bdf5ae690c">   }</div><div data-lake-id="6fa295447acad650016f24b39b0988b0">   array[left] = key;</div><div data-lake-id="aa5a0c886f5a33d8cede7f94702538f0">  }</div><div data-lake-id="bb46f23de3072c83df11df53a089216a">  return array;</div><div data-lake-id="006688e329a18a5d399bae90a519d4db"> }  </div><div data-lake-id="c1d8e8a5c7dea129ad0bdc49d58c9838"> else {</div><div data-lake-id="69c8cbb1fe4e73fb8aabc68ad3b8e5cb">  return 'array is not an Array!';</div><div data-lake-id="3478ecb952d852a7bb79df19ab1eb66b"> }</div><div data-lake-id="fd71d7f488eadc9661607aa52397700e">}</div><div data-lake-id="64498acacfe1f0eee6027be483d7bfc7">var a = [1,4,2,5,3];</div><div data-lake-id="e8be6f1d76854c57cd8081bee35fe118">var result = binaryInsertionSort(a);</div><div data-lake-id="cc002d1a649e951ec512aa4c97708013">debugger;</div><div data-lake-id="8d92bb817bfcc840cb38ac225b2ff65a">

选择排序

</div><div data-lake-id="71b8a4b552a4929acf25ba7719d58226">/*</div><div data-lake-id="32adf1968ccd459f22a076ea97e32334">1)算法简介</div><div data-lake-id="7a2168808e1ff775980210b40e6baa0d">选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。</div><div data-lake-id="1b1d435f47578a92b42f998034680767">2)算法描述和实现</div><div data-lake-id="e7e5754856c65edb6faa93fe7a3f09de">n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:</div><div data-lake-id="800c25cc2c0a0410f47ab2d88cdc5655">初始状态:无序区为R[1..n],有序区为空;</div><div data-lake-id="fb1ab2453ddf19079aa0adb0a8b4b33c">第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;</div><div data-lake-id="eccf33d069f60fbd9f18e945682830ee">n-1趟结束,数组有序化了。</div><div data-lake-id="ef950a07d89950266f454c83e73564ab">3)算法分析</div><div data-lake-id="5ed8cffe7c3c3fb2dbb38cca73570786">***情况:T(n) = O(n2)</div><div data-lake-id="3490fde57d52dda5e70104b23cd6cee1">最差情况:T(n) = O(n2)</div><div data-lake-id="c846c879919690d014e1ef4b64b60338">平均情况:T(n) = O(n2)</div><div data-lake-id="bcba12b2d0b16a8cf91f8bc0a6a73416">*/</div><div data-lake-id="6a131605f2508df51439e8409070c35f">function selectionSort(array) {</div><div data-lake-id="a406bd6ba312aacc06a208a648bebee0"> if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {</div><div data-lake-id="44929b6a5fa5d8828e5f0c7830165eff">  var len = array.length, temp;</div><div data-lake-id="60932fa287be0203abd1dd94114ab4ef">  for (var i = 0; i < len - 1; i++) {</div><div data-lake-id="0299cfac8aa15760b56200c0873e6fc2">   var min = array[i];</div><div data-lake-id="4479ae640dfe16f4ebeea1591ce73734">   for (var j = i + 1; j < len; j++) {</div><div data-lake-id="d5bbd214590a457bda1c132ed0f77092">    if (array[j] < min) {</div><div data-lake-id="924c9e10ad6e4e140ad6a9dd46585a04">     temp = min;</div><div data-lake-id="965929f4bb7284b41379c18d95d7ca17">     min = array[j];</div><div data-lake-id="75bb23887488f002f58f685abb2970a0">     array[j] = temp;</div><div data-lake-id="11590483d471924a850866572f5a5aab">    }</div><div data-lake-id="de42d641c1b9385d78c69169a3c83b06">   }</div><div data-lake-id="b8d851f07122db64903659d0ff790714">   array[i] = min;</div><div data-lake-id="e87e86969d9ad0a08ec6a64037088e07">  }</div><div data-lake-id="7ca7e1a0c0eabfb2c93246d71766836e">  return array;</div><div data-lake-id="db1dbcf57f259fd500c121553daf240b"> }  </div><div data-lake-id="1df32860aa0443ec806678be47495560"> else {</div><div data-lake-id="37d65004aba477ec73f0bdad381ef2b0">  return 'array is not an Array!';</div><div data-lake-id="9ad1879bc954457435dbdde81358caf5"> }</div><div data-lake-id="d0e4b477a09f3b83a580e60138984a90">}</div><div data-lake-id="54388d7a9072010cc42cdb0f04171569">var a = [1,4,2,5,3];</div><div data-lake-id="61ecdab5abbc1833882059c2440cd432">var result = selectionSort(a);</div><div data-lake-id="90c2b6e148e09bff4f2d596cc30ad2c3">debugger;</div><div data-lake-id="4fb0c14d5891401752c7fa6272784fff">

选择排序

</div><div data-lake-id="aa26d1c28ba38670b6c2a3be229bdd17">/*</div><div data-lake-id="de724790828e7073ea833db1c41a35fb">1)算法简介</div><div data-lake-id="303cb7b5cf8e97fe71d691c2ee5c07d4">选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。</div><div data-lake-id="29dc4d6fc4ccb6bdab573b14414529ec">2)算法描述和实现</div><div data-lake-id="b72913991bc7e575697bc23bd88bede1">n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:</div><div data-lake-id="9e2a773a24294b447ee6c1a0f101884b">初始状态:无序区为R[1..n],有序区为空;</div><div data-lake-id="69c21de302b2813874d7006bdbf3be7e">第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;</div><div data-lake-id="4e1ca70c87229cfda4830852cac0988c">n-1趟结束,数组有序化了。</div><div data-lake-id="daf459281bbbe4d20c17d8f942de409f">3)算法分析</div><div data-lake-id="c1eaaaa059c15d24003830a6d829bec8">***情况:T(n) = O(n2)</div><div data-lake-id="f45d285dc1fd2738aebd51e7324f914d">最差情况:T(n) = O(n2)</div><div data-lake-id="6f460700e30336edbdba2c26ea65378e">平均情况:T(n) = O(n2)</div><div data-lake-id="e959bcc2d32ebe5cb4475eb7d33bd064">*/</div><div data-lake-id="09d7987e494fb8d06bc2c05d54b503d1">function selectionSort(array) {</div><div data-lake-id="0c73f744720a87ffca9dfc729dc6b2db"> if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {</div><div data-lake-id="c40fb3d7a71cac64ea6db97a4a84a137">  var len = array.length, temp;</div><div data-lake-id="b0bfbea0d8f2bce49bfe57a497ebf687">  for (var i = 0; i < len - 1; i++) {</div><div data-lake-id="b78c7cf92b676e82fb585e34ae8685fb">   var min = array[i];</div><div data-lake-id="861ccaafdfe635f0d4af307f34346366">   for (var j = i + 1; j < len; j++) {</div><div data-lake-id="4b5bb1d39399254e83336ec22714e674">    if (array[j] < min) {</div><div data-lake-id="785d431304f0fa03f9f877b683c4e672">     temp = min;</div><div data-lake-id="43f506e3bcdacd290fd5acbfb727a58b">     min = array[j];</div><div data-lake-id="96584ea2078e44197f128f1ec2e0fc8f">     array[j] = temp;</div><div data-lake-id="80042a47bdea8dbc470c679017345c59">    }</div><div data-lake-id="4bd8734ab5639f12f11f42adbeb5d7b1">   }</div><div data-lake-id="7b022de86e3400869ad1d76f26884148">   array[i] = min;</div><div data-lake-id="0a0e838a5be82d93070c1d708875ea42">  }</div><div data-lake-id="a085a14cf2f52435dda3a5e9db88fbb8">  return array;</div><div data-lake-id="d932af873190662a6efe9660c0fcb186"> }  </div><div data-lake-id="f03b98ba52c4e97126cb6256dc3119ea"> else {</div><div data-lake-id="ce0ef78db17ff4a3ed61bf2e447378ad">  return 'array is not an Array!';</div><div data-lake-id="006f2293a10e827d7bd61c68f9bd04b5"> }</div><div data-lake-id="71595797aab29da4acbad66ebbf30b47">}</div><div data-lake-id="6c3f4143b8d478c2f5ef242719b2385b">var a = [1,4,2,5,3];</div><div data-lake-id="1dc083dd17090da9b1ec5c1a444a463d">var result = selectionSort(a);</div><div data-lake-id="9a24df295c089d0beab1123a2268c9a5">debugger;</div><div data-lake-id="64035b6df1cb59e7ffecf87d1b36dc58">

冒泡排序

</div><div data-lake-id="f8871e6c6bb13f1daebcb318fb9febb3">/*</div><div data-lake-id="327077198bb7548ecd5b01582637c0e2">1)算法简介</div><div data-lake-id="a814d1ec403634b7b2756d5f4bb2d1fc">冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。</div><div data-lake-id="4416f9175ea4a0aaeafa6441a30be632">2)具体算法描述如下:</div><div data-lake-id="a9de78aad92ad07c25f32be3b91d52a3">比较相邻的元素。如果第一个比第二个大,就交换它们两个;</div><div data-lake-id="0691a327b180ebedce2ef126f90e6234">对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;</div><div data-lake-id="67f0c006ebfad31655a7f8921cdf16d6">针对所有的元素重复以上的步骤,除了最后一个;</div><div data-lake-id="e0b65e9ae0646a8cf471a14ad317ce9a">重复步骤1~3,直到排序完成。</div><div data-lake-id="c89740ac53d7c7be5f066893d2e91667">3)算法分析</div><div data-lake-id="8bf80005d64556fa608a020bdc7b87b9">***情况:T(n) = O(n)</div><div data-lake-id="890cb1936d30644a314448190d58b6bd">最差情况:T(n) = O(n2)</div><div data-lake-id="51140ff4ad7206fab22ac8957f024a47">平均情况:T(n) = O(n2)</div><div data-lake-id="9be1ab4246b9160caa49cfbd4d8197f0">*/</div><div data-lake-id="56ad45fa6ab15780ba52b4f8730838a1">function bubbleSort(array) {</div><div data-lake-id="3256a016446e0da2f8786dd95524a301"> if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {</div><div data-lake-id="1968d076352cd111d6b1429cb4f2001a">  var len = array.length, temp;</div><div data-lake-id="0f78bc7b07c9f099ef4453e46d757ee0">  for (var i = 0; i < len - 1; i++) {</div><div data-lake-id="f7e31692c14c0249eadd4d6610193445">   for (var j = len - 1; j >= i; j--) {</div><div data-lake-id="387a911608d5a778f8f8fc3f91d5cbaf">    if (array[j] < array[j - 1]) {</div><div data-lake-id="003815878e0b1a7cecf5dd32508587a2">     temp = array[j];</div><div data-lake-id="3c7a81ac43e92b346bf2fd34a055e14b">     array[j] = array[j - 1];</div><div data-lake-id="088c6f1ccaf5d1eb1d2912c18a06aef9">     array[j - 1] = temp;</div><div data-lake-id="af51b668d1a3ed98893c78ffee335615">    }</div><div data-lake-id="30b269933e257c509545c93b53ad53cc">   }</div><div data-lake-id="ece7abdb9bcbf5ce5d3f362afbe513cb">  }</div><div data-lake-id="1452354ce07e0d0dc977d857488f896d">  return array;</div><div data-lake-id="19e24e9533a340e9813ef355c96b761e"> }  </div><div data-lake-id="fee605d198c8d846f37667b376c522e1"> else {</div><div data-lake-id="6348462b5d7af031d9eeee9ad2a6e5c0">  return 'array is not an Array!';</div><div data-lake-id="ff96959c7fc43246c15c89b85577f6ff"> }</div><div data-lake-id="c1df28b29424953968aafeff8c9405dd">}</div><div data-lake-id="a41e995458d863615b85fa448935981d">var a = [1,4,2,5,3];</div><div data-lake-id="a2a263d99243c26c98885a98567e33d7">var result = bubbleSort(a);</div><div data-lake-id="3dbf4d27d720d476f10cdeeaa652ae16">debugger;</div><div data-lake-id="5c474047a67034c489b48b47a5318897">

快速排序

</div><div data-lake-id="bdfee6f89fbb2ebf562b0a0355e6437f">/*</div><div data-lake-id="fb12ba71db330d2ef868a65a23272e34">1)算法简介</div><div data-lake-id="6391f33a42fdeec7b8f0cbda29b7016e">快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。</div><div data-lake-id="b043389200e101b0d07f3e63397dd9f9">2)算法描述和实现</div><div data-lake-id="42a68fe2f5fb7f5008497216eed61565">快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:</div><div data-lake-id="2df138695a697af97c56cc5ffbf7d27c">从数列中挑出一个元素,称为 "基准"(pivot);</div><div data-lake-id="c5e38a80bab1035240f1ab39a7c1a030">重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;</div><div data-lake-id="cab6fe4e7b89d479efd2203b9396ad75">递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。</div><div data-lake-id="f3b5a500ebea4af0e160edeff72fd5dc">3)算法分析</div><div data-lake-id="fba732ebc457fd21df0e93255f227d77">***情况:T(n) = O(nlogn)</div><div data-lake-id="0889f433be01f6fbb3f6f94423e54eb6">最差情况:T(n) = O(n2)</div><div data-lake-id="ad48059d43e2f8ff38d344f6e21abc7c">平均情况:T(n) = O(nlogn)</div><div data-lake-id="5b645c5944e2ac9f231e8bf8d8a05842">*/</div><div data-lake-id="ebff50a8048213fcd490f7270b40ee89">function quickSort(array, left, right) {</div><div data-lake-id="496c3c53f4b0746b3629e923959e2cfd"> if (Object.prototype.toString.call(array).slice(8, -1) === 'Array' && typeof left === 'number' && typeof right === 'number') {</div><div data-lake-id="287dffcfe45564e4c4fc639c16867fe5">  if (left < right) {</div><div data-lake-id="4a62e9c50d34458dc87a73144b214ea5">   var x = array[right], i = left - 1, temp;</div><div data-lake-id="4d74db9f8b7440f2dd1613325c542c86">   for (var j = left; j <= right; j++) {</div><div data-lake-id="0d8a69b6f4999fa8c5e15995ff94c449">    if (array[j] <= x) {</div><div data-lake-id="6b9bf05a1f7590ed62365c3f15a2b4ae">     i++;</div><div data-lake-id="22501237580764e64f3f1aaca43124e8">     temp = array[i];</div><div data-lake-id="71402914a5157c91af326332b141b11a">     array[i] = array[j];</div><div data-lake-id="9c37602d328d753b0fce541eb6a1628b">     array[j] = temp;</div><div data-lake-id="36a699550e471d5adcaa1c570ea94d70">    }</div><div data-lake-id="e8f0f01cb09d75dd0c7ce1b356951df0">   }</div><div data-lake-id="c6cc4eca012fb4983d77d0fbcc67036d">   quickSort(array, left, i - 1);</div><div data-lake-id="aa5d7ff7fc5af8a5ae8c89d165d4477d">   quickSort(array, i + 1, right);</div><div data-lake-id="fa7190c797349175ebe916395a5074e2">  };</div><div data-lake-id="1a95585fa38c8efb1f9c23e9f897fb11"> }  </div><div data-lake-id="59f91893132f0fc63fa732812be44ccc"> else {</div><div data-lake-id="9e3632c91e93f69998e3423e3152d9a5">  return 'array is not an Array or left or right is not a number!';</div><div data-lake-id="5023d169f8d1223d7d68480440c414fc"> }</div><div data-lake-id="3ae8feead72b1266ee579bae0d146617">}</div><div data-lake-id="c2c9749cfb9cacf8b4bfa9a1be333df8">var a = [1,4,2,3,5,2,1];</div><div data-lake-id="0cce719ab191d1215029cccf1768b3ab">quickSort(a, 0, a.length - 1);</div><div data-lake-id="722b970bd15855b7bb2336dbe87f92d0">debugger;</div><div data-lake-id="238b64d92821f8091fce0c87c97b83f3">

堆排序

</div><div data-lake-id="7f75749a770f5d60ba463a6c8621e390">/*</div><div data-lake-id="6759b9d5092f70d6a690c54a2b10f4ed">1)算法简介</div><div data-lake-id="3f234e9db8e9c7945d86c75cd8a78d03">堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。</div><div data-lake-id="bccff8afde60a3e01f8b89b79e186f93">2)算法描述和实现</div><div data-lake-id="317cee596a7a2758f024a1e3b0bb054c">具体算法描述如下:</div><div data-lake-id="c77f26c39b0476826a817a7226756353">将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始的无序区;</div><div data-lake-id="8083874e222c8ecdccf540beb322ec06">将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,......Rn-1)和新的有序区(Rn),且满足R[1,2...n-1]<=R[n];</div><div data-lake-id="04643bdda5f79dbaea56850c333631df">由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,......Rn-1)调整为新堆,然后再次将R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2....Rn-2)和新的有序区(Rn-1,Rn)。不断重复此过程直到有序区的元素个数为n-1,则整个排序过程完成。</div><div data-lake-id="b4972f5c047be095767fe2b9a07e754d">3)算法分析</div><div data-lake-id="ab198633e57965a5c40c3e43a9ea2dc0">***情况:T(n) = O(nlogn)</div><div data-lake-id="99d64e59112d29a829ebb3e71547dbc8">最差情况:T(n) = O(nlogn)</div><div data-lake-id="54a9f76005de33ba4e6b405f8e221a8f">平均情况:T(n) = O(nlogn)</div><div data-lake-id="01835e30c91b825ca79f0318941eac36">*/</div><div data-lake-id="4e9ee7f1a1dc221b627bee7f8d4aba4d">/*方法说明:堆排序</div><div data-lake-id="99cdd65b7afbed4d540bff2bf9163dd5">@param array 待排序数组*/</div><div data-lake-id="8c97cabe4cf1834e3c577e061a1ad5c9">function heapSort(array) {</div><div data-lake-id="0fcf3838528b78efd59fb0c21dd9f937"> if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {</div><div data-lake-id="be34eb458461796d381fcfcecfa14a92">  //建堆</div><div data-lake-id="0364f33df0edc02028de5068e0097562">  var heapSize = array.length, temp;</div><div data-lake-id="bf4270694d55ff0994e83c1c690c0e9d">  for (var i = Math.floor(heapSize / 2); i >= 0; i--) {</div><div data-lake-id="2191cde25bde11d70b1d212dc587e95b">   heapify(array, i, heapSize);</div><div data-lake-id="ba9f1a550aa3e4d583b8a50c9dd8fe22">  }</div><div data-lake-id="6ce7c018f8dbf03d3f123d39dcf7b0aa">  //堆排序</div><div data-lake-id="4a9a941576d7970859959895dacdda2a">  for (var j = heapSize - 1; j >= 1; j--) {</div><div data-lake-id="284fe9c024ed5fe8270be407429ab37f">   temp = array[0];</div><div data-lake-id="f8ff182c0c6738d5fb7cb71ed6822522">   array[0] = array[j];</div><div data-lake-id="d963aecdfb348e02639165306c7b24c4">   array[j] = temp;</div><div data-lake-id="788e5d89233b904bda0baa43f2d2e7c1">   heapify(array, 0, --heapSize);</div><div data-lake-id="de844fa4ffc8baebb67765ae4d25dc38">  }</div><div data-lake-id="89bbf94665a136ba76a3efa66280d640"> }  </div><div data-lake-id="fdeafcdd2b449df19e7f736587efc804"> else {</div><div data-lake-id="93cbaf347f6750b7d37d11a54d1f4d06">  return 'array is not an Array!';</div><div data-lake-id="754962bb428247e79f2b6e8550f0a721"> }</div><div data-lake-id="118b255ae1dd79d0749c9b6e9c163a89">}</div><div data-lake-id="7de8bd1d13a333f4ce585f1b74ad45ce">/*方法说明:维护堆的性质</div><div data-lake-id="fb891714a4b151b311c04d56a9b9a823">@param arr 数组</div><div data-lake-id="00d2dd9dec1e79fb76e2575aa0ef19eb">@param x 数组下标</div><div data-lake-id="b464dc9fe85899f5dda07fe34ffb099a">@param len 堆大小*/</div><div data-lake-id="2c981ae2a9e713e6388b5e94bf142374">function heapify(arr, x, len) {</div><div data-lake-id="2fe55ea104ec138b879aa3b6c0190099"> if (Object.prototype.toString.call(arr).slice(8, -1) === 'Array' && typeof x === 'number') {</div><div data-lake-id="e9373e3c0e6e91d24cd31153dba8cefa">  var l = 2 * x, r = 2 * x + 1, largest = x, temp;</div><div data-lake-id="9650e4ed70225bf22cdf73b93a23aadb">  console.log("x: " + x + " l: " + l + " r: " + r + " largest: " + largest);</div><div data-lake-id="b1bc25fad821572297666649b60cabe1">  console.log(" arr[l]: " + arr[l] + " arr[largest]: " + arr[largest]);</div><div data-lake-id="b2e79294903a17bf10bfb12965b3c325">  if (l < len && arr[l] > arr[largest]) {</div><div data-lake-id="83d128b949fc641c4400fdc289e08c9d">   console.log(" left child > largest, plan to swap!");</div><div data-lake-id="e77d9d9812edcd4c736726f302025225">   largest = l;</div><div data-lake-id="15d969b2a6c7fb7cf64b3a5ca5ddd7ca">  }</div><div data-lake-id="d1f71f912d59d42001be30d3605ebd7d">  if (r < len && arr[r] > arr[largest]) {</div><div data-lake-id="da189400257aacbe1add096dd4bb34f5">   console.log(" right child > largest, plan to swap!");</div><div data-lake-id="59b128c121c4a9cf885089cb705afc91">   largest = r;</div><div data-lake-id="94829f5d4b7882ec303971af93f02cd6">  }</div><div data-lake-id="8ea25d5730a72d1fc7e21872751da8e6">  if (largest != x) {</div><div data-lake-id="af5dc748b385aa5df4722813d4275a76">   temp = arr[x];</div><div data-lake-id="16134f06dc5731629fce52645fb51e88">   arr[x] = arr[largest];</div><div data-lake-id="14efc51777f9b0ce11242c3e05ef5e70">   arr[largest] = temp;</div><div data-lake-id="60aa411012491874e7d07305ce96b0be">   heapify(arr, largest, len);</div><div data-lake-id="390fb333472de0dcef9288df00c90dcd">  }</div><div data-lake-id="965e65a4a9a93f0803b698c6dcd90529"> }  </div><div data-lake-id="f89c05319e0944e0ce44c38287d82d3f"> else {</div><div data-lake-id="f02352b9f0c92ba5eb4ead3de007ca45">  return 'arr is not an Array or x is not a number!';</div><div data-lake-id="dd5710b150d5001b4d73258ffc47487b"> }</div><div data-lake-id="6ebdd3ee404519a2413a546da4820a0b">}</div><div data-lake-id="5f1f661a68cb3273ecf48deef3e9b860">var a = [1,0,3];</div><div data-lake-id="9a38dc494c28017e83a171a64b1417c2">// var a = [1,4,2,3]</div><div data-lake-id="6240cb6ca2bd3772b10205f71dac254f">var result = heapSort(a);</div><div data-lake-id="780f8f42ecb146be15608a3e8855dcc8">debugger;</div><div data-lake-id="966ac0e93e347a6a0128379f5396c1c7">

归并排序

</div><div data-lake-id="cb16298218fbc379e7e5e8bda7c0bf81">/*</div><div data-lake-id="915c1375a3b9c6200dd487ef0a5cf558">1)算法简介</div><div data-lake-id="1f8d24703e3e86ff4a84c8bfad9407c9">归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。</div><div data-lake-id="5e3eb4933cb4d83e9347c766139eae7d">2)算法描述和实现</div><div data-lake-id="a4dc115912a3fe6eca68d77e40e02a75">具体算法描述如下:</div><div data-lake-id="1eb9903163c2d7c07c0bbffc6b5ce255">把长度为n的输入序列分成两个长度为n/2的子序列;</div><div data-lake-id="ff5f2968400a6f538ce1e8dda1195cd1">对这两个子序列分别采用归并排序;</div><div data-lake-id="fb8db3a3c38773ab47742c814777363c">将两个排序好的子序列合并成一个最终的排序序列。</div><div data-lake-id="5c7bbff1ccd6e41e6928582caa0084e6">3)算法分析</div><div data-lake-id="003e599b74058f917857b2c9000dd35d">***情况:T(n) = O(n)</div><div data-lake-id="d78cc52f88af3399d0537b151e92cbdd">最差情况:T(n) = O(nlogn)</div><div data-lake-id="6773105fedae517167afcfadce54d6d2">平均情况:T(n) = O(nlogn)</div><div data-lake-id="eaaedd915c3524ba5a22a1833a3bce43">*/</div><div data-lake-id="51dd39a6f038692a60f416b039a6cb11">function mergeSort(array, p, r) {</div><div data-lake-id="1eb7b6fbcf25d7d0f23e553055156867"> if (p < r) {</div><div data-lake-id="46e40f5ff725b5b9e72f765b445df8fe">  var q = Math.floor((p + r) / 2);</div><div data-lake-id="80fda7dcdb3082b2b25fd3b6b6f23515">  mergeSort(array, p, q);</div><div data-lake-id="21ed7f3f071c4b34c1169cd4454a051a">  mergeSort(array, q + 1, r);</div><div data-lake-id="5e2d30067df4aeed53cc0fd7f1d7e1de">  merge(array, p, q, r);</div><div data-lake-id="3f3fedcad65fdce7f5084424dee0db8c"> }</div><div data-lake-id="be5455c468e97a4ffe1f117bab525f50">}</div><div data-lake-id="4469bdb1b7e13616f36a7dad4fa9d740">function merge(array, p, q, r) {</div><div data-lake-id="f7a0adcc8db7321311e0f380025e0be8"> var n1 = q - p + 1, n2 = r - q, left = [], right = [], m = n = 0;</div><div data-lake-id="4875a29c1b7fa50211b3ae4c6e06ea8b"> for (var i = 0; i < n1; i++) {</div><div data-lake-id="2bd6f386c2182fdcec13c42671cb9785">  left[i] = array[p + i];</div><div data-lake-id="e6cdb25b6c24fca3eb144cecdf4f3515"> }</div><div data-lake-id="4b482a9bd965d10845932088906cfdde"> for (var j = 0; j < n2; j++) {</div><div data-lake-id="fedf91e89e6c953d9d185f0605863178">  right[j] = array[q + 1 + j];</div><div data-lake-id="49f5654bdbfd5348415d8c0749e48491"> }</div><div data-lake-id="c0fdbd2e78da1597634a95a38a2c53d4"> left[n1] = right[n2] = Number.MAX_VALUE;</div><div data-lake-id="ebc723f80d804e98c2ba87449f94d173"> for (var k = p; k <= r; k++) {</div><div data-lake-id="161030aa599c1fd6b8d0eabe594f265e">  if (left[m] <= right[n]) {</div><div data-lake-id="25dc039126ee173edd36f6b23f3fb75f">   array[k] = left[m];</div><div data-lake-id="a2b9dd9320a7ac6b12142f41a04c4dca">   m++;</div><div data-lake-id="45265522befc1f182855db6c50769819">  }  </div><div data-lake-id="9cd071be61bf7caa3538620779653905">  else {</div><div data-lake-id="0afffd77334edbb8e83cce6c98dc3dcf">   array[k] = right[n];</div><div data-lake-id="52a1cc70c77e9ab14fec80e8fd385643">   n++;</div><div data-lake-id="9f673acb0489d1819532c523fc9bbb2f">  }</div><div data-lake-id="3dc052af91e95d2430f9f072ce425c63"> }</div><div data-lake-id="323502c9ac27e8baf570c47b81f98ba4">}</div><div data-lake-id="339ab335622d2494efc2a8b2d888fa46">var a = [1,0,3,2,5,3];</div><div data-lake-id="1fd5ef2b68182f75ed62dbd88c50a3b6">var result = mergeSort(a,0,a.length - 1);</div><div data-lake-id="f824a9fbce2e3e851ff58c2b44f7b52e">debugger;</div><div data-lake-id="3ea8de2b3e25945efabbdab52bde4db7">

桶排序

</div><div data-lake-id="0613e6816963404db1eb72d599a2256c">/*</div><div data-lake-id="c7a20b7ce2095d8da5596ac93430514e">1)算法简介</div><div data-lake-id="2b774b1cb661c4292d0154a9cd6510cd">桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。</div><div data-lake-id="b2fd4705ac466d51ce78bbd3b82362da">2)算法描述和实现</div><div data-lake-id="eec831ec1527ba1cb067bb8f0131d078">具体算法描述如下:</div><div data-lake-id="f5bc2d826215d02fa7b18bc3a7bbf8b9">设置一个定量的数组当作空桶;</div><div data-lake-id="735bf7988753b18b9445cd5eeb46470d">遍历输入数据,并且把数据一个一个放到对应的桶里去;</div><div data-lake-id="1f4345a05a8d37303b550a499ddeb1ea">对每个不是空的桶进行排序;</div><div data-lake-id="2f2acabc815038f1b5b0d21c3667d3ea">从不是空的桶里把排好序的数据拼接起来。</div><div data-lake-id="8f73133d54e339995888fe75ad80ac21">3)算法分析</div><div data-lake-id="baf5e82f43ae451f3ad1f1d48484c2fa">桶排序***情况下使用线性时间O(n),桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,因为其它部分的时间复杂度都为O(n)。很显然,桶划分的越小,各个桶之间的数据越少,排序所用的时间也会越少。但相应的空间消耗就会增大。</div><div data-lake-id="b0fda414edc8849b2bef72dd4777c737">*/</div><div data-lake-id="94a339195dbcb7cd4fbabfd541e5b5b8">/*方法说明:桶排序</div><div data-lake-id="1fc266e04a35a899e07355889eb36e4a">@param array 数组</div><div data-lake-id="ed3de3971eb1410f788ab8a8dc938ad4">@param num 桶的数量*/</div><div data-lake-id="527cd763f90b2961e81617f7f56f6a86">function bucketSort(array, num) {</div><div data-lake-id="f8c63e2a013dbac31c1c7c9e7fc8c4d8"> if (array.length <= 1) {</div><div data-lake-id="056c9997e15d31b2cedee797badf4d0d">  return array;</div><div data-lake-id="face3b3072b3fd5587f9bea5322c9905"> }</div><div data-lake-id="45d45170b9dfe195244864aa2d5bd7a5"> var len = array.length, buckets = [], result = [], min = max = array[0], regex = '/^[1-9]+[0-9]*$/',  </div><div data-lake-id="4b792cccd6ba099d49df06cc93aa19b2"> space, n = 0;</div><div data-lake-id="a50d98cb9b9c35150024ea909133b617"> num = num || ((num > 1 && regex.test(num)) ? num : 10);</div><div data-lake-id="eb50ad327cfb5ca527484ca698df976c"> for (var i = 1; i < len; i++) {</div><div data-lake-id="fe7f507fa4cda38c39e198885be9c2a6">  min = min <= array[i] ? min : array[i];</div><div data-lake-id="f0578d47f41a389df3d27d41277d841c">  max = max >= array[i] ? max : array[i];</div><div data-lake-id="dc8ef0ec1458a4601dd920c68347ff5d"> }</div><div data-lake-id="491bd7292249ce5a04951d34d59336d7"> space = (max - min + 1) / num;</div><div data-lake-id="76d0f06a4d56a9227e8089b6d53849d5"> for (var j = 0; j < len; j++) {</div><div data-lake-id="e07a9e3e3a0554cb6d144f76b10bd1bb">  var index = Math.floor((array[j] - min) / space);</div><div data-lake-id="f3e46cd01c6a25e45f1321ab25c0263f">  if (buckets[index]) {</div><div data-lake-id="c81a5009b2c642c93129b1cf1b09c3d1">   // 非空桶,插入排序</div><div data-lake-id="2cc7f552a5ed74a82b7216d464b90dd0">   var k = buckets[index].length - 1;</div><div data-lake-id="938e4335133303c6c076fd7a315f6e4a">   while (k >= 0 && buckets[index][k] > array[j]) {</div><div data-lake-id="0013d74ac539889880cb2c61facd577e">    buckets[index][k + 1] = buckets[index][k];</div><div data-lake-id="14090c4194bf2d172e7cd29c5f19d378">    k--;</div><div data-lake-id="fa0f45779862aa0b50c8866be6875e4b">   }</div><div data-lake-id="f3aeaba88e892106444785547f5483a9">   buckets[index][k + 1] = array[j];</div><div data-lake-id="e0d90d04aeec4a4ebc7b76f6f61ea287">  }  </div><div data-lake-id="d63a74d272232c4f03f71c0c81f1469c">  else {</div><div data-lake-id="20dda88ed3b06e611984a4a955604626">   //空桶,初始化</div><div data-lake-id="cfb59fa80c1c71ff99e49b7bc17f9a06">   buckets[index] = [];</div><div data-lake-id="e080fcd9b04e093eb0d9fe64eec150b9">   buckets[index].push(array[j]);</div><div data-lake-id="d442ff54625f4d8d5a5c0cbf21cad827">  }</div><div data-lake-id="1d3056edf9e4b07db3920820afcaa5d2"> }</div><div data-lake-id="b423dc3a0c687c22d9524c2f7e50c298"> while (n < num) {</div><div data-lake-id="99e841cda4b4c3a1abd20c9f91d9ceff">  result = result.concat(buckets[n]);</div><div data-lake-id="97558f16520cfb74b2f668530b516e46">  n++;</div><div data-lake-id="67041ada20f0524d044ba68e02170d8e"> }</div><div data-lake-id="e235ffea205f64c0109ab591b0d69fc0"> return result;</div><div data-lake-id="c861b0581f37c7f1a597015780cd14fe">}</div><div data-lake-id="a11577168a38d11e68e89a4c84a2b964">var a = [0,4,1,3,2,6];</div><div data-lake-id="0e9f8664ac462762306c913bb5866cae">var result = bucketSort(a, a.length-1);</div><div data-lake-id="24341f4d3155ec1275bdf76f8d459a8c">debugger;</div><div data-lake-id="812653fcc54ce8b16c3fa83cd31956db">

计数排序

</div><div data-lake-id="b4da97472a6b36a4ebd3929add9ed94d">/*</div><div data-lake-id="87d4707f4a06bb5adad86fdd8e2bf299">1)算法简介</div><div data-lake-id="ef2e8ffc142cf4f9f12b7f4e52e35e33">计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。</div><div data-lake-id="6df435ed75c253f4bcae6c6f66095d6b">2)算法描述和实现</div><div data-lake-id="88524959e28c0da84178cac9ad85c9c9">具体算法描述如下:</div><div data-lake-id="ce494bec9f08b3ba0bfadac7c223112a">找出待排序的数组中最大和最小的元素;</div><div data-lake-id="36c7ab298a955d306bc30b2ed418c9a7">统计数组中每个值为i的元素出现的次数,存入数组C的第i项;</div><div data-lake-id="33f92e048f71241a2a25bd1af33b5b69">对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);</div><div data-lake-id="6ddc763c57e73ad21a4f95aa99067c99">反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。</div><div data-lake-id="7bb701e9af1617f8b307b4f647db8a74">3)算法分析</div><div data-lake-id="e9c4ebf25e56df210a19e711a3dd3f62">当输入的元素是n 个0到k之间的整数时,它的运行时间是 O(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。</div><div data-lake-id="a5b8cb47dfdeb2c8247cf136f86b5839">*/</div><div data-lake-id="c4c6eec199b7ea2478f3fb7fad4c8745">function countingSort(array) {</div><div data-lake-id="7dbee376962f46b523d53480776938f0"> var len = array.length, B = [], C = [], min = max = array[0];</div><div data-lake-id="8c8e831d57e5eceadb1f7ff37ee40b2e"> for (var i = 0; i < len; i++) {</div><div data-lake-id="abb09bbc38bf0d2084de86fdc89d41e1">  min = min <= array[i] ? min : array[i];</div><div data-lake-id="a8c73c50d9080c28d6919c0ee1020ce6">  max = max >= array[i] ? max : array[i];</div><div data-lake-id="8c38b5db18596859d9efaf84f73aa310">  C[array[i]] = C[array[i]] ? C[array[i]] + 1 : 1;</div><div data-lake-id="35ebe2fbfe374357b74074371958ac79"> }</div><div data-lake-id="c78e74cc327be024e4bb7b4b916fed5a"> for (var j = min; j < max; j++) {</div><div data-lake-id="83d57e7b2764892e1052178f3922dd11">  C[j + 1] = (C[j + 1] || 0) + (C[j] || 0);</div><div data-lake-id="7d1fdea1359c789d4c3c39ab7119be8b"> }</div><div data-lake-id="4b644b1d5dfe1fdf19b5c6ce1c17efe8"> for (var k = len - 1; k >=0; k--) {</div><div data-lake-id="54db34d364dca57218c4617c741d2370">  B[C[array[k]] - 1] = array[k];</div><div data-lake-id="bd20508d2977cf3cb66aea781b6dc8b7">  C[array[k]]--;</div><div data-lake-id="d5e154bc4b069d89144fd1b21ec7c11d"> }</div><div data-lake-id="b8217e52084143a9e91075167daa5eaa"> return B;</div><div data-lake-id="5fe7af2c9846731a6af61deda6fefb41">}</div><div data-lake-id="dd27e6fce17e573e30593fa9617447a4">var a = [0,4,1,3,2,6];</div><div data-lake-id="4dee6f4361255a4b547150bd9691e0a1">var result = countingSort(a);</div><div data-lake-id="0e35017944b805be6da27f9ce0bb203a">debugger;</div><div data-lake-id="efe94400b7b6b52d5393407e8af625bc">