冒泡排序
==>把一个乱序的数组按照一定的算法排序好
步骤 1、准备一个数组 var arr=[9,2,6,4,3,8,5,7,1]
==>利用第三个变量交换变量的值
步骤 2、
先遍历循环数组 ==>
让前一个数字和后一个数字比较
->如果前一个数字比后一个数字大那就换一下
->执行一遍后,最大的数字一定在最后
for(var j=0;j<arr.length;j++){
if(arr[j]>arr[j+1])
var tmp=arr[j]
arr[j]=arr[j+1]
arr[j+1]=tmp }
3,让步骤 2
重复执行 for( var i=0;i<arr.length;i++){
for(var j=0;j<arr.length-1;j++){
if(arr[j]>arr[j+1])
var tmp=arr[j]
arr[j]=arr[j+1]
arr[j+1]=tmp }
}
代码执行优化:
步骤 2 下标:
0-8 ==>第一遍 arr[0] > arr[1]
==>第二遍 arr[1] > arr[2]
==>第三遍 arr[2] > arr[3]
==>第四遍 arr[3] > arr[4]
==>第五遍 arr[4] > arr[5]
==>第六遍 arr[5] > arr[6]
==>第七遍 arr[6] > arr[7]
==>第八遍 arr[7] > arr[8]
==>第九遍 arr[8] > arr[9]
==>最后一次比较的是[8]>[9]
==>[9]是 undefined 实际上比较的是 数字>undefined
==> 最后一次比较的没有意义 所以步骤二的判断条件可以减一,只比较到[7]>[8]
步骤 2、3
==>重复第一回,把最大的数字放在最后
==>重复第二回,把第二大的数字放在倒数第二位
->最后一回,第二大和第一大比较-1 次
==>重复第三回,把第三大的数字放在倒数第三位
->第三大和第二大比较 -1 次
->最后一回,第二大和第一大比较-1 次
==》以此类推直到最后一回
规律 重复几回外层循环判断 内层 arr.length-1 减去几回
口诀 ==>双层 for 循环,一层减一次,里层减外层,变量相交换
var arr=[9,2,6,4,3,8,5,7,1]
for( var i=0;i<arr.length-1;i++){
for(var j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]) var tmp=arr[j] arr[j]=arr[j+1] arr[j+1]=tmp }
}
计数排序 countSort
==>利用数组的索引
==>数组的索引也是一个数字
1、准备一个数组 arr=[100,87,66,92,35,35,24,11,2,3,87,91]
2、遍历原始数组
==>准备一个新的空数组
==>遍历原始数组
==>把原始数组里面的每一个数字当作索引填充到新数组里面
var tmpArr=[] //在创建好的 tmpARR[]添加数据,如果当前索引没有数据,设置为 1
//索引位置有数据,++
for(var i=0;i<arr.length;i++){
//console.log(arr[i])
//查看原始数据
// if(tmpArr[arr[i] ]!==undefined){
tmpArr[arr[i]]++ }else{ tmpArr[arr[i]]=1 }
}
//遍历临时数组
arr.length = 0; for(var i=0;i<tmpArr.length;i++){
//判断当前是不是 undefined if(tmpArr[i] === undefined) continue
//i 就是数组需要排序的数字
//tmpArr[i] 是这个数字有多少个
//console.log(i,tmpArr[i]) for(var j=1;j<=tmpArr[i];j++){
arr[arr.length]=i }
}
console.log(arr)
选择排序
==>每次选择一个最小的放在前面
1、如何找到数组里面最小的数字的索引
==>循环遍历数组
==>假设数字[0]位置最小
==>如果拿一个数字比我还小,那就用哪个小的数字的索引,把我假设的索引替换掉
==>就是找到了一个最小的数字索引
var arr=[9,2,6,4,3,8,5,7,1]
var minIndex=0; for (var j =1;j<arr.length;j++){
if(arr[j] < arr[minIndex]){ minIndex=j }
} var tmp=arr[0] arr[0]=arr[minIndex] arr[minIndex]=tmp
重复执行步骤一
==>重复的时候需要变化
==>规律 第一遍 i===0,
假设[0],开始[1],交换[0]
第二遍 i===1, 假设[1],开始[2],交换[1]
第三遍 i===2, 假设[2],开始[3],交换[2]
第四遍 i===3, 假设[3],开始[4],交换[3]
第八遍 i===8, 假设[7],开始[8],交换[7]
var arr=[9,2,6,4,3,8,5,7,1] for(var i=0;i<arr.length-1;i++){
var minIndex=i;
for (var j =i+1;j<arr.length;j++){
if(arr[j] < arr[minIndex]){ minIndex=j }
}
var tmp=arr[i] arr[i]=arr[minIndex] arr[minIndex]=tmp
}
console.log(arr)