從排序的方法來說:通常分爲交換、插入、選擇、合併等,交換方式的排序有:冒泡排序、快速排序;插入方式的排序有:希爾排序;選擇方式的排序有:堆排序。算法
冒泡排序數組
算法原理描述:比較相鄰的元素。若是第一個比第二個大,就交換他們兩個。第一對作完後,而後對第二對(即第二個數和第三個數)比較,若前一個比後一個大,就交換他們,依次對每一對相鄰元素作一樣的工做,從開始第一對到結尾的最後一對。最後的元素應該會是最大的數,最後一個不須要再作比較,因此是比較length-1次。ui
function bubbleSort(arr){ var temp,nLen=arr.length-1; for (var i = 0; i <nLen; i++){ for (var j = 0; j < nLen-i; j++){ if(arr[j]>arr[j+1]){ temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; } } } return arr; } alert(bubbleSort([3,6,4,1,5,8]).join(""));
時間複雜度爲:O(n^2)spa
快速排序code
算法原理描述:找到一箇中間的數,而後把全部比這個數小的放到這個數前面,把全部比這個數大的放到後面,這樣完成一趟,依次對前面一段數據和後面一段數據進行前面步驟的遞歸。blog
var quickSort = function(arr) { if (arr.length <= 1) { return arr; } var mIndex = Math.floor(arr.length / 2); var mid = arr.splice(mIndex, 1)[0]; var left = [],right = []; for (var i = 0; i < arr.length; i++){ if (arr[i] < mid) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([mid], quickSort(right)); } alert(quickSort([3,6,4,1,5,8]).join(""));
時間複雜度爲:O(n^2)排序
插入排序遞歸
排序原理描述:將一系列無序的元素,往一個有序的元素序列裏面插入,造成一個有序的序列。插入的時候,將無序的元素序列中每一個元素依次和有序的數組最後一個元素開始比較,若是比該元素小,則和該元素交換位置,依次比較,找到一個最合適的位置,即比前一個元素大,比後一個元素小。io
/*直接插入排序*/
var arr = [3,6,9,2,8,4]; function insertSort(arr){ var nLen = arr.length,temp; //從第二開始,第一個默認爲有序 for (var i = 1; i < nLen; i++){ temp = arr[i]; //對無序的元素,依次和前面有序的數組元素比較, //若是更小,則和前一個元素調換位置 for (var j = i; j>0 && temp < arr[j-1]; j--){ arr[j] = arr[j-1]; arr[j-1] = temp; } } return arr; } alert(insertSort(arr).join(""));
/*希爾排序*/ var arr = [3,6,9,2,8,4]; function insertSort(arr){ //增量直接插入排序 return arr; } alert(insertSort(arr).join(""));
時間複雜度爲:O(n^2)function
選擇排序
排序原理描述: