给大家介绍三种常见的数组排序方法
- 冒泡排序
- 插入排序
- 选择排序
1. 冒泡排序
冒泡排序又称为交换排序。原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则两数对调,再进行下一个元素的比较。如此经过第一次扫描后就可以确保最后一个元素位于正确的顺序。经过第二次扫描可以确保倒数第二个元素位于正确的顺序。由此可知,N个元素经过(N-1)次扫描,就可以完成所有元素的排序。
// 冒泡排序
function Bubble (arr) {
let len = arr.length -1;
for(let i = 0; i < len; i++){
let done = true;
for(let j = 0;j < len - i;j++){
let a = arr[j];
if(arr[j] > arr[j+1]){
arr[j] = arr[j+1]
arr[j+1]= a;
done = false;
};
};
if(done) break;
};
return arr;
};
2. 插入排序
插入排序是将数组中的元素,逐一与已排序好的数据进行比较,前两个元素先排好,再将第三个元素插入适当的位置,所以这三个元素仍然是已排好序的,接着将第四个元素加入,重复此步骤,直到排序完成为止。
function InsertSort(arr) {
let len = arr.length;
let preIndex, current;
for (var i = 1; i < len; i++) {
preIndex = i - 1;
current = arr[i];
while (preIndex >= 0 && current < arr[preIndex]) {
arr[preIndex + 1] = arr[preIndex];
preIndex--;
}
arr[preIndex + 1] = current;
}
return arr;
}
3. 选择排序
选择排序,算是枚举法的应用,就是反复从未排序的数列中取出最小的元素,加入到另一个数列中,最后的结果即为已排序的数列。从小到大排序的操作是一开始在所有的数据中挑选一个最小项放在第一个位置,再从第二项开始挑选剩下元素的最小项放在第2个位置,以此反复,直到完成排序为止。
function selectionSort(arr) {
var len = arr.length;
var minIndex, temp; //minIndex最小值对应的下标,临时变量
for(var i = 0; i < len - 1; i++) {
minIndex = i;
for(var j = i + 1; j < len; j++) {
if(arr[j] < arr[minIndex]) { //寻找最小的数
minIndex = j; //将最小数的索引保存
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}