//交换两个位置数据 方法 的抽取 ArrayList.prototype.swap = function (m, n) { var temp = this.array[m] this.array[m] = this.array[n] this.array[n] = temp }
冒泡排序代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
ArrayList.prototype.bubbleSort = function () { //获取数组的长度 var length = this.array.length //第一次:j=length-1 比较到倒数第一个位置 //第二次:j=length-2 比较到倒数第二个位置 //。。。到第0个位置 for (var j = length - 1; j >= 0; j--) { //第一次进来 i=0 比较0和1位置的两个数据 如果0位置大于1位置数据 //最后一次进来 i=length-2,比较length-2和length-1的两个数据 for (var i = 0; i < j; i++) { if (this.array[i] > this.array[i + 1]) { //交换数据 this.swap(i, i + 1) } } } }
选择排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
//选择排序 ArrayList.prototype.selecttionSort = function () { //1.获取数组长度 var length = this.array.length
//2.外层循环 从0位置取数据 for (var i = 0; i < length - 1; i++) { //3.内层循环 从i+1位置开始与后面的内容比较 var min = i for (j = min + 1; j < length; j++) { //4.如果i的位置的数据大于j的位置的数据,那么记录最小值让min=j if (this.array[min] > this.array[j]) { min = j } //交换数据 this.swap(min, i) } } }
ArrayList.prototype.shellSort = function () { //获取数组长度 var length = this.array.length //根据数组的长度计算gap的大小 var gap = Math.floor(length / 2) //gap不断变小 while (gap >= 1) { //实现插入排序 for (i = gap; i < length; i++) { //保存临时变量 var temp = this.array[i] var j = i //内层 while (this.array[j - gap] > temp && j > gap - 1) { this.array[j] = this.array[j - gap] j -= gap } //选出的位置设置为temp this.array[j] = temp } //重新计算gap 新的间隔 gap = Math.floor(gap / 2) } }
快速排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
//快速排序 var quickSort = function(arr) { if (arr.length <= 1) { return arr; } var pivotIndex = Math.floor(arr.length / 2); var pivot = arr.splice(pivotIndex, 1)[0]; var left = []; var right = [];
for (var i = 0; i < arr.length; i++) { if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right)); };