JavaScript数组排序方法
- Es6 - sort()方法
<script>
let arr = [6,5,4,2,7,1,3];
console.log(arr.sort()) // [1, 2, 3, 4, 5, 6, 7]
function sortNumber(a,b){
// return a - b // [1, 2, 3, 4, 5, 6, 7]
return b - a // [7, 6, 5, 4, 3, 2, 1]
}
console.log(arr.sort(sortNumber))
</script>
- 冒泡排序
原理:冒泡排序是最简单的,只需要通过两次遍历,两两交换,就可以实现排序。
<script>
let arr = [6,5,4,2,7,1,3];
// 冒泡排序
function sortArr(arr) {
for (let i = 0; i < arr.length - 1; i++) { // 最后一次不需要 循环
for (let j = 0; j < arr.length - i; j++) { // 二次遍历,每次都是在 i 之后执行, 假如有8个元素,那么就遍历 i 之后的 7个元素
if (arr[j] < arr[j - 1]) { // 如果右边,小于左边,那么交换位置
let temp = arr[j]; // temp作为中间变量
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
return arr;
}
console.log(sortArr(arr))
</script>
3. 插入排序
原理:
1、从第二个元素开始,遍历它之前的元素。
2、如果他之前的元素,大于他,那么交换。并继续往前遍历之前比它大的元素。
//插入排序
function arrSort(array) {
for (let i = 1; i < array.length; i++) {//遍历一波数组,从数组第二项开始遍历
let key = array[i];//这里必须要定义,因为循环结束,会用到。
let j = i - 1;//定义j为i-1,在第一次遍历,是从数组第一项开始
while (j >= 0 && array[j] > key) { // 如果j的值大于i的值,也就是左边的数大于右边的数,j>=0,防止j--变负数。
array[j + 1] = array[j]; // 例如第二项和第三项248和31,那么变成,31,248
j--; // 如果248>31执行成功了,变成了31,248,那么依次判断左边,是否有小于 31 的。
}
array[j + 1] = key;//把第一项赋值成最小的那个。
}
return array;
}
console.log(arrSort(arr));
4. 选择排序
原理:跟冒泡排序差不多,也是两两交换,不过这两两交换,是第一位和第五位交换,而不是第四位和第五位。
//选择排序
// 1
function arrSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {//遍历数组
let min = arr[i]; // 防止arr[i]发生变化 -- 6
for (let j = i + 1; j < arr.length; j++) { // 双重遍历,查找最小的数进行交换,
if (min > arr[j]) { // 跟冒泡不一样的地方在于,选择排序,假如第4位更小,则是1,4位交换,不是3,4位交换
console.error(min + "-----" + arr[j])
let temp = min;
// console.error(temp)
min = arr[j];
arr[j] = temp;
}
}
arr[i] = min;
}
return arr;
}
console.log(arrSort(arr));
// 2
function selectSort(arr) {
var len = arr.length
var minIndex, temp
for (var i = 0; i < len - 1; i++) {
minIndex = i // 0,1,2,3,4 下标
console.error(minIndex)
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
console.error(arr[j] + "-----" + arr[minIndex])
minIndex = j
}
}
temp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = temp
}
return arr
}
console.log(selectSort(arr))
待续。。。。