排序方法
(一)//原生双重for循环排序 (冒泡排序)
for (let i = 0; i < arr.length; i++) { for (let z = 0; z < arr.length; z++) { if (arr[i] < arr[z]) { [arr[i], arr[z]] = [arr[z], arr[i]] } } } console.log(arr);
(二)原生利用对象
let newarr = [] let obj = {}//创建空对象 //给空对象一个初始键 arr.forEach(function (item) { obj[item] = 0 }) //{4: 0, 6: 0, 8: 0, 10: 0, 20: 0, 29: 0} //判断每一项有几个数小于它 小于它的项最多的就是最大项 for (let i = 0; i < arr.length; i++) { arr.forEach(function (item) { if (arr[i] > item) { obj[arr[i]]++ } }) } console.log(obj);//{4: 0, 6: 1, 8: 2, 10: 3, 20: 4, 29: 5} //最大的项,有五个数小于它 for (const key in obj) { newarr[obj[key]] = key }//新数组的第0项目也就是最小的项,就是有0个数小于他的项 console.log(newarr);
(三)sort()方法
console.log(arr.sort(function(a,b){ return a-b }));
(四) 参考插入排序
let arr = [10, 20, 6, 8, 29, 4] //参考 插入排序 //从第一个元素开始,该元素可以被认为已经被排序 // 取出下一个元素,在已经排好序的序列中从后往前扫描 // 直到找到大于该元素的位置 let newarr = [] newarr.push(arr[0])//把第一项放过去 [10] for (let i = 1; i < arr.length; i++) { let j = 0//每一次都从第一项比起 while (arr[i] > newarr[j]) {//arr里面的项去newarr从前到后比大小 j++ } newarr.splice(j, 0, arr[i]) }//从前往后面找,找到大于自己的项,把自己放在它前面 没找到的话,说明它自己是最大的,值也没有改变就是设置的0,把它放到第0项即可. console.log(newarr);
(五)选择排序
每次找到最小的,放在最前面,然后外层循环加一,因为最小的已经不需要找了,再找第二小的放在最前面.每一次把第i项当成默认的最小项,也就是从第i项开始查找,因为i项之前的都已经排好了,最后交换位置,即把最小的交换到i的位置.也就是递增
let arr = [10, 20, 6, 8, 29, 4] for (let i = 0; i < arr.length - 1; i++) { let mindex = i;//用于储存最小值的下标,排序刚开始时,假设最小值的下标就是选中的基准数据下标 for (let j = i + 1; j < arr.length; j++) { if (arr[j] < arr[mindex]) { mindex = j } } [arr[i], arr[mindex]] = [arr[mindex], arr[i]] } console.log(arr);