JavaScript --数据排序算法(1)
常用的排序算法有
- 冒泡排序
- 快速排序
- 选择排序
- 插入排序
- 归并排序
冒泡排序
实现思想:判断两个相邻元素,大于或者小于则交换位置;每次对比冒泡结束,会定位一个数的位置,后面每次需要对比的次数越少,直至结束
es6有api--sort实现了冒泡排序,使用的时候注意要传入函数进去没有的话就是每个位置的数字比较了,并不是想要的
let arrTemp = [3, 2, 11, 9, 15, 19,19, 16, 1, 8]
console.log(arrTemp.sort((a, b) => b - a));
console.log(arrTemp.sort());
-------上代码自己实现原理-----
let arrTemp = [3, 2, 11, 9, 15, 19,19, 16, 1, 8]
function mySort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return arr
}
console.log(mySort(arrTemp));// [1, 2, 3, 8, 9, 11, 15, 16, 19, 19]
快速排序
排序思想:取一个基准值,比基准值小的在左边,大的在右边;左右在继续这样的操作,最后合并
实现思路:
- 从待排序的n个记录中任意选取一个索引 进行二分;
- 把所有小于该排序列的记录移动到左边,把所有大于该排序码的记录移动到右边,中间放所选记录,称之为第一趟排序
- 然后对前后两个子序列分别重复上述过程,直到所有记录都排好序。
有点类似递归的思想 不停的进行二分 分到最小单位就不进行处理,跳出操作
---上代码---
let arrTemp = [3, 2, 11, 9, 15, 19,19, 16, 1, 8]
function fast(arr) {
if (arr.length <= 1) {
return arr
}
// 取中间索引
var fastIndex = Math.floor((arr.length) / 2);
var left = []; //建立小于集合
var right = []; //建立大于的集合
// 截选出所选索引的值,并要在数组中进行去除 ***
var m=arr.splice(fastIndex,1)[0]
for (var i = 0; i < arr.length; i++) {
if (arr[i] > m) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return [...fast(right), m, ...fast(left)]
}
console.log(fast(arrTemp));//[1, 2, 3, 8, 9, 11, 15, 16, 19, 19]
下篇带来 ----选择排序 、插入排序、归并排序