javascript 数组排序
javascript 数组排序
一、冒泡法排序
废话不说 直接撸
function bubbleSort(arr){
for (let i=1;i<arr.length;i++){
for (let j=0;j<arr.length;j++){
//打印不排序的情况
console.log('arr['+i+']= ' + arr[i] + ' arr[' + j+']= ' + arr[j] );
if(arr[i]>arr[j]){
//一言不合就排序(对调两个值)
let d=arr[j];
arr[j]=arr[i];
arr[i]=d;
//打印排序的情况
console.log('arr['+i+']= ' + arr[i] + ' arr[' + j+']= ' + arr[j] + ' 交换值');
}
//打印一下变换后的数组
console.log(arr);
}
}
return arr;
}
console.log(bubbleSort([9,5,6,4,1]));
看下输出情况。。。
很清晰吧 从第二位开始每一位上的数组都和其他数字比较,大的就冒泡(换位到前面);
以下是看了前端早读课后修改的(才发现上面方法不是正宗的....)
---------------------------------------------------------------------------------------------------------------------------
1 let arr1 = [3,5,6,4,1]; 2 class arrSort{ 3 bubbleSort(arr){ 4 let [len,i,j,] = [arr.length]; 5 for (i = 0; i < len - 1; i++) { 6 for (j = 0; j < len - 1 - i; j++) { 7 console.log('arr[' + j + ']= ' + arr[j] + ' arr[' + (j + 1) + ']= ' + arr[j + 1]); 8 if (arr[j] > arr[j + 1]) { 9 let temp = arr[j + 1]; 10 arr[j + 1] = arr[j]; 11 arr[j] = temp; 12 console.log('arr[' + j + ']= ' + arr[j] + ' arr[' + (j + 1) + ']= ' + rr[j + 1] + ' 交换值'); 13 } 14 console.log(arr); 15 } 16 } 17 return arr; 18 } 19 } 20 let arrSort1 = new arrSort; 21 console.log(arrSort1.bubbleSort(arr1));
看看输出结果:
实现的思路:
1.依次比较相邻的两个数,如果第一个比第二个小,不变。如果第一个比第二个大,调换顺序。一轮下来,最后一个是最大的数
2.对除了最后一个之外的数重复第一步,直到只剩一个数
相比之下后面的方法比较的次数少了好多...这才是正宗的冒泡法....
二、选择法排序
实现的思路:
1.找出最小的数,和第一个交换位置
2.在余下的里面找最小的数,放在第二个位置
3.依次类推,排除顺序
三、插入法排序
实现的思路:
1.依次比较相邻的两个数,如果第一个比第二个小,不变。如果第一个比第二个大,调换顺序。一轮下来,最后一个是最大的数
2.对除了最后一个之外的数重复第一步,直到只剩一个数
四、快速排序
实现的思路:
1.依次比较相邻的两个数,如果第一个比第二个小,不变。如果第一个比第二个大,调换顺序。一轮下来,最后一个是最大的数
2.对除了最后一个之外的数重复第一步,直到只剩一个数
五、对象数组排序
1 function by(property) { 2 return function (o,p) { 3 var a,b; 4 if(o && p && typeof o === 'object' && typeof p === 'object'){ 5 //这里是关键代码 为a,b赋值,赋值分别为对象o、p的一个key! 6 a = o[property]; 7 b = p[property]; 8 9 if(a === b){ 10 return 0; 11 } 12 if(typeof a === typeof b){ 13 return a < b ? -1 :1; 14 } 15 return typeof a < typeof b ? -1 :1; 16 }else{ 17 throw('error'); 18 } 19 } 20 }
调用:someArray.sort(by(property));