排序方法有很多,这里只是根据自己的个人理解,做一些记录,希望大家批评指正
一、利用sort进行排序
var arr = [2, 3, 4, 1, 100, 23, 46, 67, 20, 18];
/**
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
*/
arr.sort(function(a, b) {
return a - b;
})
二、冒泡法排序(最简单,也最慢)
function sort(array) {
var i = 0,
len = array.length,
j, d;
for (; i < len; i++) {
for (j = 0; j < len; j++) {
if (array[i] < array[j]) {
d = array[j];
array[j] = array[i];
array[i] = d;
}
}
}
return array;
}
三、快速排序
理解:把比这个数小的放在这个数左边,比这个数大的放在这个数右边,一样大的和这个数放在一起,最后,左右两边各自重复上述过程
var array = [1, 45, 4, 3, 6, 46, 7];
quickSort(array);
function quickSort(array) {
var i = 0;
var j = array.length - 1;
var Sort = function(i, j) {
// 结束条件
if (i == j) {
return
};
var key = array[i];
var stepi = i; // 记录开始位置
var stepj = j; // 记录结束位置
while (j > i) {
// j <<-------------- 向前查找
if (array[j] >= key) {
j--;
} else {
array[i] = array[j]
//i++ ------------>>向后查找
while (j > ++i) {
if (array[i] > key) {
array[j] = array[i];
break;
}
}
// 最后一个空位留给 key
array[i] = key;
}
}
// 如果第一个取出的 key 是最小的数
if (stepi == i) {
Sort(++i, stepj);
return;
}
// 递归
Sort(stepi, i);
Sort(j, stepj);
}
Sort(i, j);
return array;
}
以下是个人理解,可能有问题,希望发现问题的大神能留言批评指正
1, 45, 4, 3, 6, 46, 7
第一步:sort(0,6) 1是所有里面最小的,所以第一次执行sort后,数组没有变化.
第二步:sort(1,6) 1, 45, 4, 3, 6, 46, 7 (45和7比较),将7与45换位置
1, 7, 4, 3, 6, 46, 45 然后(4与45比较)
1, 7, 4, 3, 6, 46, 45 然后(3与45比较)
1, 7, 4, 3, 6, 46, 45 然后(6与45比较)
1, 7, 4, 3, 6, 45, 46 然后(46与45比较)45与46换位置。此时45左边都比45小,右边都比45大
第三步:sort(1,4) 1, 7, 4, 3, 6
四、插入排序
var array = [1, 45, 4, 3, 6, 46, 7];
insertSort(array);
function insertSort(array) {
for (var i = 1; i < array.length; i++) {
var key = array[i];
var j = i;
while (--j >= 0) {
if (array[j] > key) {
array[j + 1] = array[j];
array[j] = key;
}
}
}
return array;
}
每次取当前值前面的一个进行对比,如果比当前值大则两个数兑换位置。以此类推。