冒泡排序: 重复访问数列,一次比较相邻两个元素,如果前一个元素比后一个元素大,那么交换他们的顺序,多次交换之后得出正确排序。
假设有这样一个数组[7, 3, 6, 1, 9, 2, 5, 4, 0, 8],使用冒泡排序进行排序,每次循环从最后一个元素开始,相邻的两个元素进行比较,如果前一个元素大于后一个元素,则两者互换
第一次排序的结果为[7, 3, 6, 1, 9, 2, 5, 4, 0, 8],其实就是把最小的元素0放到数组的第一个
第二次排序的结果为[0, 1, 7, 3, 6, 2, 9, 4, 5, 8],其实就是把第二小的元素1放到数组的第二个
第三次排序的结果为[0, 1, 2, 7, 3, 6, 4, 9, 5, 8],其实就是把第三小的元素3放到数组的第三个
以此类推即可得出最终结果
sortArray:[7, 3, 6, 1, 9, 2, 5, 4, 0, 8]
//冒泡排序
for (let i = 0; i < this.sortArray.length; i++) {
for (let j = this.sortArray.length - 1; j > i; j--) {
if (this.sortArray[j] < this.sortArray[j - 1]) {
let temp = this.sortArray[j];
this.sortArray[j] = this.sortArray[j - 1];
this.sortArray[j - 1] = temp;
}
}
}
console.info(this.sortArray);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
选择排序:每一次从待排序的数列中选出最大或最小的元素放到起始位置
假设有数组[3, 7, 6, 1, 9, 2, 5, 4, 0, 8],选择排序每次循环会假设一个最小值,然后找到真正的最小值再与其交换。
我们假设数组中最小的元素为第一个元素3,经过第一次排序发现真正最小的是最后一个元素0, 第一次排序的结果为[0, 7, 6, 1, 9, 2, 5, 4, 3, 8]
我们假设数组中最小的元素为第二个元素7,经过第二次排序发现真正最小的是第四个元素1,所以第二次排序的结果为[0, 1, 6, 7, 9, 2, 5, 4, 3, 8]
我们假设数组中最小的元素为第3个元素6,经过第二次排序发现真正最小的是最后一个元素3,所以第三次排序的结果为[0, 1, 2, 7, 9, 6, 5, 4, 3, 8]
//选择排序
for (let i = 0; i < this.sortArray.length; i++) {
// 假设最小值的下标为i
let min = i;
// 查找当次循环中真正的最小值下标
for (let j = i + 1; j < this.sortArray.length; j++) {
if (this.sortArray[min] > this.sortArray[j]) {
min = j;
}
}
// 交换
let temp = this.sortArray[i];
this.sortArray[i] = this.sortArray[min];
this.sortArray[min] = temp;
}
console.info(this.sortArray);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
插入排序:
可以把插入算法想象成一个拔萝卜的游戏,有一串萝卜[3, 7, 6, 1, 9, 2, 5, 4, 0],使用插入排序进行排序。
第一次排序,把萝卜7拔出来,因为萝卜3比萝卜7要小,所以把萝卜3放到萝卜7前面,结果就为[3, 7, 6, 1, 9, 2, 5, 4, 0, 8]
第二次排序,把萝卜6拔出来,因为萝卜6大于萝卜3,但是萝卜6小于萝卜7,所以把萝卜6放在萝卜3后面,萝卜7前面,结果为[3, 6, 7, 1, 9, 2, 5, 4, 0, 8]
第三次排序,把萝卜1拔出来,因为萝卜1小于萝卜3,所以把萝卜1放到萝卜3前面,结果为[1, 3, 6, 7, 9, 2, 5, 4, 0, 8]
按照以上规律以此类推即可得到最终排序[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let array = [3, 7, 6, 1, 9, 2, 5, 4, 0, 8];
for (let i = 1; i < array.length; i++) {
let j;
let temp = array[i];
for (j = i; j > 0 && array[j - 1] > temp; j--) {
array[j] = array[j - 1];
}
array[j] = temp;
}
console.log(array);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]