冒泡排序 时间复杂度为O(n^2),有两个优点:
1.“编程复杂度”很低,很容易写出代码;
2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。
实现基本思路:冒泡排序是经过n-1趟子排序完成的,第i趟子排序从第1个数至第n-i个数,若第i个数比后一个数大(则升序,小则降序)则交换两数。
<script type="text/javascript"> var number = new Array(); for(var i = 0; i < 1000; i++){ number[i] = parseInt(999 * Math.random()); } function bubblingSort(num){ var k;//比较节点 for(var j = num.length - 1; j > 0; j--){ for(var i = 0;i < j; i++){ if(num[i] > num[i+1]){ k = num[i]; num[i] = num[i+1]; num[i+1] = k; } } } return num; } document.write("原始顺序:" + number +"<br/>"); document.write("排序顺序:" + bubblingSort(number)); </script>
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
在序列基本有序的情况下,是最优时间复杂度,也是所有排序算法中最快的。
<script type="text/javascript"> function insert_sort(num){ var key; for(var i = 1; i < num.length; i++){ key = num[i]; j = i - 1; while(j >= 0 && num[j] > key){ num[j+1] = num[j]; j--; } num[j+1] = key; } return num; } var number = new Array(); for(var i = 0; i < 1000; i++){ number[i] = parseInt(1000*Math.random()); } document.write(insert_sort(number)); </script>