1.冒泡排序
外层循环-1
内层循环-1又减i
内循环相邻的两个比较大小
相邻交换位置
var arr = [4,3,7,2,1,6,5];
//外层循环空 轮数
for(var i=0;i<arr.length-1;i++){
//内循环空只比较数的大小(趟数是根据多少个数来决定的)
//这里的-i,会少i个数
for(var j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
//交换位置
var temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
console.log(arr);
2.选择排序 (比喻打擂台)
var arr = [4,3,7,2,1,5,6]
for(var i=0;i<arr.length-1;i++){
var win = arr[i]; //第一个上台的人
var winIndex = i; //看好的第一个人
for(var j = i+1;j<arr.length;j++){ //台下
if(win>arr[j]){
win = arr[j];
winIndex = j;
}
}
//在外边交换位置 就会减少交换的次数
if(winIndex != i){
var temp = arr[i];
arr[i] = arr[winIndex];
arr[winIndex] = temp;
}
}
console.log(arr)
3.插入排序
var arr = [5,3,8,2,4,6,7];
function insertion(array){
for(var i=1;i<array.length;i++){
var preIndex = i-1 //获取前一个下标
var current = array[i] //先保存当前的值 为防止
while(preIndex>=0 && current < array[preIndex]){
//如果前一个下标大于等于0 和 当前的值为小于上一个
array[preIndex+1] = array[preIndex] //将本身这个位置的值赋值为上一个
preIndex-- //递减 继续往前走
}
array[preIndex+1] = current //当前的位置的值等于原本位置的值
}
}
insertion(arr);
console.log(arr);
4.快速排序
var arr = [2,1,6,5,3,4]
function quiskSort(arr){
//1.判断arr长度必须大于等于2,否则就返回该数组
if (arr.length<2) {
return arr;
}
// 2.长度大于等于2的数组 就可以拆
//长度除以2 向下取整
var index = parseInt(arr.length /2);
//3.根据中间下标 把中间数 从原来数组中抠出来
var middelVal = arr.splice(index,1)[0]
// 4.准备2个空数组
var left = [] ,right=[];
for(var i = 0;i<arr.length;i++){
if (arr[i]>middelVal) {
right.push(arr[i])
}else{
left.push(arr[i])
}
}
//5.递归合并:左边数组+中间数+右边数组
return quiskSort(left).concat(middelVal,quiskSort(right))
}
console.log(quiskSort(arr));