冒泡排序
原理分析:
依次比较两个相邻的值,如果后者较小,则交换两者的顺序,让最大的值排在最后。
视频讲解链接
const arrBuble = [911, 520, 888, 2323, 666, 555];
function bubleSort(arr =[]){
//外层循环控制比较的轮数,两两比较只要比较length-1次
for(let i=0; i< arr.length-1;i++){
//里面循环控制每一轮比较的次数
for(let j = 0; j < arr.length-1-i;j++){
if(arr[j] > arr[j+1]){
//使用ES6结构赋值交换顺序
[arr[j],arr[j+1]]=[arr[j+1],arr[j]]
}
}
//打印每一轮比较的结果
// console.log(arr);
}
return arr;
}
console.log(`冒泡排序最后结果:`+bubleSort(arrBuble))
快速排序
原理分析:里面使用到了递归思想
1.新建两个空数组left、right
2.然后找到数组的基准值,point = arr[Math.floor(arr.length/2)],
3.遍历数组的每一项,小于这个基准值的项放到left数组,大于基准值的放到right数组
4.然后按照步骤2、3,递归上面left、right数组
5.最后将left、基准值和right数组用concat拼接起来
const arrQuick = [911, 520, 888, 2323, 666, 555];
function quickSort(arr =[]) {
if (arr.length <= 1) {
return arr;
}
let left = [], right = [];
let pivot = arr[Math.floor(arr.length / 2)];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else if(arr[i] > pivot){
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
}
console.log(`快速排序最后结果:` + quickSort(arrQuick));
插入排序
原理分析
一个待排序的数组类比抽取扑克牌然后插入已排好序的手中扑克牌。假设手中三项是已经从小到大排序好的扑克牌, 现在取第四张扑克牌(i=4),然后将第四张扑克牌(j=i)与前面已排好序的扑克牌比较,若arr[j]<arr[j-1],则交换位置, 下一轮,j--。注意交换条件是:小的值交换到前面去。
const arrInsert = [911, 520, 888, 2323, 666, 555];
function insertSort(arr=[]){
for(let i=1; i< arr.length;i++){
//里面循环控制每一轮比较的次数
for(let j = i; j >0 ;j--){
if(arr[j] < arr[j-1]){
//使用ES6结构赋值交换顺序
[arr[j],arr[j-1]]=[arr[j-1],arr[j]]
}
}
}
return arr;
}
console.log(`插入排序最后结果:` + insertSort(arrInsert));