排序算法
冒泡排序
n个数进行排序
外层循环完成n-1次比较次数
内层循环完成数组元素两两进行比较
//将数组元素从小到大进行排序
var arr = new Array(22,44,11,33,77,66,55),//定义数组
n = arr.length,
temp // 数组元素交换的中间变量
for(var i = 0 ; i < n - 1 ; i++){//循环条件为n-1是判断总共只需要比较n-1轮
for(var j = 0 ; j < (n - 1 - i) ; j++ ){//循环条件是(n-1)-i是第一轮全部都要比较,得到最大的数,第二轮不需要比较最大的数,则比较次数-1,类推
if(arr[j] > arr[j+1]){
temp = arr[j+1]
arr[j+1] = arr[j]
arr[j] = temp
}
}
}
选择排序
思路:在未排序的剩余数组中找到最大(最小)值,将最大(最小)值与剩余数组第一位进行交换位置
//从大到小排列数组
var arr = [33,22,44,11,77,55,66],
temp //中间变量
//外层循环遍历数组索引,方便后面进行交换,第一次循环将最大(最小)提到第一位,第二次循环将第二大值提到第二位,所以外层循环最好代表索引号
for(var i = 0 ; i < arr.length ; i++){
//var i = maxIndex //假设索引i对应的数组值最大
//内层循环遍历arr[i]后面的数并依次与arr[i]进行比较
for(var j = i + 1 ; j < arr.length ; j++){
if(arr[i] < arr[j]){
temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
//temp = arr[maxIndex]
//arr[maxIndex] = arr[j]
//arr[j] = temp
//两种交换都行,区别是if里面写可能会多交换几次
}
数组去重(待补充)
方法一:双重for循环遍历数组,比较值,重复的值截取出去(在原数组上改变)
var arr = [11,22,33,22,22,11,44,55,33]
//外层for循环代表遍历数组,依次找到第i个元素
for(var i = 0 ; i <arr.length ; i++){
//内层循环代表遍历arr[i]后面的所有元素
for(var j = i + 1 ; j< arr.length ; j++){
if(arr[i] == arr[j]){
arr.splice(j,1)
j-- //如果这里不进行j--那么未截取之前的数组的第j+1位将会被漏判
}
}
}
console.log(arr)
方法二:新建一个新数组,使用indexOf判断新数组中是否有该元素,无则push
var arr = [11,22,33,22,22,11,44,55,33],
newArr = [] //新数组为空
for(var i = 0 ; i < arr.length ; i++){
//判断新数组中是否有原数组元素
if(newArr.indexOf(arr[i]) == -1){
//新数组中没有该元素,将该元素push到新数组中
newArr.push(arr[i])
}
}
console.log(newArr)