如下幾種排序算法作爲方法放在構造函數裏。javascript
function ArrayList () { var array = []; // 交換位置 var swap = function (index1, index2) { var aux = array[index1]; array[index1] = array[index2]; array[index2] = aux; } this.insert = function (item) { array.push(item); }; this.toString = function () { return array.join(); }; this.val = function () { return array; } // 冒泡排序 this.bubbleSort = function () { //etc } }
this.bubbleSort = function () { console.time('Bubble Sort'); var length = array.length; for (var i = 0; i < length; i++) { for (var j = 0; j < length - 1 - i; j++) { if (array[j] > array[j+1]) { swap(j, j + 1); } } } console.timeEnd('Bubble Sort'); }
this.selectionSort = function () { console.time('selectionSort'); var length = array.length, indexMin; for (var i = 0; i < length - 1; i++) { indexMin = i; for (var j = i; j < length; j++) { if (array[indexMin] > array[j]) { indexMin = j; } } if (i !== indexMin) { swap(i, indexMin); } } console.timeEnd('selectionSort'); }
this.insertionSort = function () { console.time('insertionSort'); var length = array.length, j, temp; for (var i = 1; i < length; i++) { j = i; temp = array[i]; while (j > 0 && array[j-1] > temp) { array[j] = array[j-1]; j--; } array[j] = temp; } console.timeEnd('insertionSort'); }
圖解html
this.mergeSort = function () { console.time('mergeSort'); array = mergeSortRec(array); console.timeEnd('mergeSort'); } var mergeSortRec = function (array) { var length = array.length; if (length === 1) { return array; } var mid = Math.floor(length / 2), left = array.slice(0, mid), right = array.slice(mid, length); return merge(mergeSortRec(left), mergeSortRec(right)); } var merge = function (left, right) { var result = [], il = 0, ir = 0; while (il < left.length && ir < right.length) { if (left[il] < right[ir]) { result.push(left[il++]); } else { result.push(right[ir++]); } } while (il < left.length) { result.push(left[il++]); } while (ir < right.length) { result.push(right[ir++]); } return result; }
this.quickSort = function () { console.time('quickSort'); quick(array, 0, array.length - 1); console.timeEnd('quickSort'); } var quick = function (array, left, right) { var index; if (array.length > 1) { index = partition(array, left, right); if (left < index - 1) { quick(array, left, index - 1); } if (index < right) { quick(array, index, right); } } }; // 劃分過程 var partition = function (array, left, right) { var pivot = array[Math.floor((right + left) / 2)], i = left, j = right; while (i < j) { while (array[i] < pivot) { i++; } while (array[j] > pivot) { j--; } if (i <= j) { swapQuickSort(array, i, j); i++; j--; } } return i; } var swapQuickSort = function (array, index1, index2) { var aux = array[index1]; array[index1] = array[index2]; array[index2] = aux; }
代碼java
this.esSort = function () { console.time('esSort'); var tempArray = []; tempArray = array.sort(function (a, b) { return a - b; }); console.timeEnd('esSort'); return tempArray; }
OS:WIN10 64位算法
瀏覽器:Google Chrome 60.0.3112.78數組
/** * 建立隨機數組 * @param {[type]} size [description] * @return {[type]} [description] */ function createNonSortedArray (size) { var array = new ArrayList(); for (var i = size; i > 0; i--) { var tempNum = Math.random() * i >>> 0; array.insert(tempNum); } return array; } // 冒泡排序 (function () { var array = createNonSortedArray(500); array.bubbleSort(); // Bubble Sort: 2.625ms console.log(array.val()); }()); // 選擇排序 (function () { var array = createNonSortedArray(500); array.selectionSort(); // selectionSort: 1.986083984375ms console.log(array.val()); }()); // 插入排序 (function () { var array = createNonSortedArray(500); array.insertionSort(); // insertionSort: 1.825927734375ms console.log(array.val()); }()); // 歸併排序 (function () { var array = createNonSortedArray(500); array.mergeSort(); // mergeSort: 0.76416015625ms console.log(array.val()); }()); // 快速排序 (function () { var array = createNonSortedArray(500); array.quickSort(); // quickSort: 0.39111328125ms console.log(array.val()); }()); // ES排序 (function () { var array = createNonSortedArray(500); array.esSort(); // esSort: 0.34130859375ms console.log(array.val()); }());
出處:http://blog.givebest.cn/javascript/2017/08/02/javascript-sorting-algorithms.html 瀏覽器