冒泡排序:
遍历所有元素(从小到大排序),依次比较相邻的两个元素(小的放前面,大的放后面)效率很低
动态图如下所示:
代码示例:
var arr = [10,18,1,6,9,20,7,90];
for(var i = 0; i <= arr.length - 1; i++){
for( var j = 0; j <= arr.length - 1 - 1 - i; j++){
// 第二个1 最后一个和前一个比较过了 没必要在比一次
// -i 外层循环执行了几次说明已经有几位已经排好序了 没必要在排序了
if( arr[j] > arr[j+1]){
var m;
m = arr[j];
arr[j] = arr[j+1];
arr[j+1] = m;
}
}
}
console.log(arr);
运行结果如下:
选择排序:
先找到所有元素中的最小值,然后将他存储的索引和起始索引交换位置,再从剩下的元素中找最小值,将它的索引与已排好的下一位索引交换位置,一次循环,将所有的元素从小到大排序 效率比冒泡排序高
动态图如下所示:
代码示例:
var arr = [10,18,1,6,9,20,7,90];
console.log(arr);
for( var j = 0; j <= arr.length - 1 - 1; j++){
// 第二个1 最开始的不用跟自己比较
var min = j;
for( var i = j + 1; i <= arr.length - 1; i++){
if(arr[min] > arr[i]){
min = i;
}
}
if(min != j){
var m;
m = arr[j];
arr[j] = arr[min];
arr[min] = m;
}
}
console.log(arr);
运行结果:
数组去重方法之indexOf():
目前只学习了indexOf这种去重方法,所有我就只写了这一种
// 新建数组
var arr = ['红','红','火','火','恍','恍','惚','惚','哈','哈','嘿','嘿',2,2,4,4,null,null];
console.log(arr);
// 新创建一个空数组来存储原始数组中的不重复数据
var arr1 = [];
// 循环遍历,获取原始数组中的所有数据
arr.forEach(function(val){
// 如果arr1.indexOf(val)的执行结果如果是-1(全等)说明新数组中没有原始数组的数据
if(arr1.indexOf(val) === -1){
// 将这个数据,写入到新数组中
arr1.push(val);
}
})
console.log(arr1);
// 新创建一个空字符串来存储原始数组中的不重复数据
var arr2 = '';
// 循环遍历,获取原始数组中的所有数据
for(var key in arr){
// 如果arr2.indexOf(arr[key])的执行结果如果是-1(全等)说明新字符串中没有原始数组的数据
if(arr2.indexOf(arr[key]) === -1){
// 执行字符串拼接操作,将这个数据拼接到新的字符串中
arr2 += arr[key];
}
}
console.log(arr2);