冒泡排序 時間複雜度為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>