冒泡排序
逐个往上冒
冒泡的总次数为长度-1
里面第一个数第一数+1的数相比,比完换位置
冒泡的比较是一次
比一次少 最后达到一次结束
var arr = [12,14,23,22,1]
function fn(){
for(var i=1; i<arr.length;i++){
冒泡的次数
for(var j=0;j<arr.length-i;j++){ 记录次数
if(arr[j]>arr[j+1]){ 比较
var temp = arr[j] 换位置
arr[j]=arr[j+1] 保留位置
arr[j+1]=temp
}
}
}
}
fn(arr)
console.log(arr);
选择排序
每次选择当前的第一个数为最小值
这个值跟后面的所有去做比较 然后对应的比我这个值还小的 把下标记录起来
将这个下标赋值给我们设置的变量名
判断是否为我们前面设置到的数值,如果是就不做操作,如果不是就进行换
//每次选择
var arr = [12,14,23,22,1]
function fun(array){
for(var i=0;i<array.length-1;i++){//选择下标
//设置第一个数字为最小值
var min=i
for(var j=i+1;j<array.length;j++){//i+1,自己不用跟自己比
if(array[min]>array[j]){ //如果比最小值还小
min = j //使用设置的值换成记录下的值
}
}
if(min!=i){//如果记录下的值跟我们刚开始指定的下标不一样
var temp=array[i] //保存当前值的位置
array[i] = array[min] //赋值
array[min] =temp
}
}
}
fn(arr)
console.log(arr);
插入排序
从后往前 初始下标为1
第一次比较为下标1和下标0比较一次
第二次比较为2和1比较 1和0比较 比较俩次
。。。。后面持续递增
var arr = [12,14,23,22,1]
function fr(array){
for(var i=1;i<array.length;i++){ //下标从1开始
for(var j=i;j>0;j--){ //从后往前排序
if(array[j-1]>array[j]){ //俩数作比较 如果前面大于后面,进行换位
var temp = array[j-1]
array[j-1]=array[j]
array[j] = temp
}
}
}
}
fn(arr)
console.log(arr);
第二种插入排序 (完善,不管在排序的时候从哪里插入,都能排序好)
var arr = [12,14,23,22,1]
//array.length 是arr数组的长度
function fr(array){
for(var i=1;i<array.length;i++){//先选择下标
var ps = i-1//获取前一个下标
var pt = array[i]//保存当前的值,以防丢失
while (ps>=0 && pt<array[ps]) {
//如果前一个下标大于等于0 与 当前的值为小于上一个
array[ps+1]=array[pt]//将本身这个位置的赋值为上一个
ps--//递减 继续往前走
}
array[ps+1]=pt//当前位置的值等于保存位置的值
}
}
fr(arr)
console.log(arr);