目录
1、选择排序
从第一项起,每一项都和后面所有项依次比较,如果被比较项比当前项小,则两项交换位置。
每一轮,都找到一个最小的数,放到前面。
var arr = [5, 32, 2, 7, 45];
console.log(fn(arr));
function fn(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
var temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
return arr;
}
2、冒泡排序
从第一项起,比较相邻的两个元素,如果前一个比后一个大,则交换位置。第一轮的时候最后一个元素应该是最大的一个。每一轮最后一个元素已经是最大的了,所以最后一个元素下一轮不用比较。
function fn(arr) {
for (var i = 1; i < arr.length; i++) {
for (var j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
console.log(arr.toString()); // 每一轮数组的状况
}
return arr;
}
3、快速排序
先取出数组的第一项,然后用其它项依次和这个第一项进行比较,如果比它小,则放左左边的一个数组中,否则,放到右边的一个数组中,然后依次递归调用
<script>
function fn(arr) {
// 如果数组长度小于等于1,则返回数组,不用再比
if (arr.length <= 1) {
return arr;
}
var num = arr.shift(); // 取得数组的第一项,并让数组长度减小
var left = []; // 存比num小的数
var right = []; // 存大于等于num的数
for (var i = 0; i < arr.length; i++) {
var v = arr[i];
if (v < num) {
left.push(v);
} else {
right.push(v);
}
}
return fn(left).concat(num, fn(right));
}
var arr = [4, 6, 2, 6, 5, 8, 4, 7, 3];
console.log(fn(arr));
</script>