冒泡排序
思想: 一次比较元素的的大小,小的与大的进行位置上的调换
function bubbleSort(arr) {
for(let i = 0, len = arr.length; i < len; i ++) {
for(let j = i+1; j < len; j ++) {
if(arr[i] > arr[j]) {
let temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
return arr;
}
快速排序
思路:参考某个元素值,将小于他的值,放在左数组中,大于它的值放在右数组中,然后递归进行上一次左右数组的操作,返回合并的数组就是已经排序好的数组。
function quickSort(arr) {
if(arr.length <=1 ) {
return arr;
}
let leftArr = [],
rightArr = [],
quick = arr[0];
for(let i = 0, len = arr.length; i < len; i ++) {
if (this[i] > quick) {
this.rightArr.push(this[i]);
} else {
this.leftArr.push(this[i])
}
}
return [].contat(quickSort(leftArr), [quick], quickSort(rightArr));
}
插入排序
思路:
- 从第一个元素开始,该元素可以被认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一个位置
- 重复第三个步骤,直到已经找到已排序小于或者等于新元素的位置
- 将新元素插在该位置的后面
- 重复2-5
Array.prototype.insertion_sort = function() {
for(let i = 1, len = this.length; i < len; i ++) {
for(let j = 0; j < i; j ++) {
if(this[j] > this[i]) {
this.splice(j, 0, this[i]);
this.splice(i+1, 1)
}
}
}
return this;
};
[3,5,2,11,1,2].insertion_sort();