Array.prototype.bubbleSort = function() { var i, j, temp; for (i = 0; i < this.length - 1; i++) { for (j = 0; j < this.length - i - 1; j++) { if (this[j] > this[j + 1]) { temp = this[j + 1]; this[j + 1] = this[j]; this[j] = temp; } } } };
2. 插入排序 (Insertion Sort)
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置插入。
具体细节如图:
时间复杂度为O(n^2)。
1 2 3 4 5 6 7 8 9 10 11 12
Array.prototype.insertionSort = function() { var i, j, temp; for (i = 0; i < this.length - 1; i++) { for (j = i + 1; j > 0; j--) { if (this[j] > this[j - 1]) break;
Array.prototype.selectionSort = function() { var i, j, min; for (i = 0; i < this.length - 1; i++) { min = this[i]; for (j = i + 1; j < this.length; j++) { if (this[j] < min) { min = this[j]; this[j] = this[i]; this[i] = min; } } } };
4. 快速排序(Quick Sort)
快速排序使用分治法,把一个序列分为两个子序列来排序。
步骤可分为:
从序列中挑出一个元素作为基准(pivot)
重新排序序列,所有比基准值小的元素摆放在基准前面,比基准大的元素摆在基准后面
递归地把小于基准值元素的子序列和大于基准值元素的子数列排序
最优时间复杂度为O(nlogn),最坏时间复杂度为O(n^2)
基础版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Array.prototype.quickSort = function() { var len = this.length; if (len <= 1) returnthis.slice(0);
var left = []; var right = []; var mid = [this[0]]; for (var i = 1; i < len; i++) { if (this[i] < mid[0]) { left.push(this[i]); } else { right.push(this[i]); } }