目录
我们首先先随便创建一个数组用于之后的排序验证
var arr = [2, 8, 7, 9, 1, 4];
冒泡排序
将前一个数与后一个数进行比较,值大的往后放,每一轮比较之后最大的数都会排到后面去
var bubbleSort = (arr) => {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
};
在第一层for循环中打印一下arr,可以发现每次最大的都往后排放了。
选择排序
第一轮比较出最小的那个数,将最小的那位数与第一位数置换;第二轮继续比较出从第二位开始的最小的那个数,将最小的那位数与第二位数置换;依次类推进行排序,将最小位放前面
var selectSort = (arr) => {
for (var i = 0; i < arr.length - 1; i++) {
var min = i;
for (var j = i + 1; j < arr.length; j++) {
if (arr[min] > arr[j]) {
min = j;
}
}
if (min !== i) {
var temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
};
在第一层for循环中打印一下arr,可以发现每次最小的都往前排放了。
插入排序
先排前两个顺序,在将第三个与排好的两个比较,然后将第三个插入合适的位置,这样前三个的顺序就排好了,依次这样就排好了。
var insertSort = (arr) => {
for (var i = 1; i < arr.length; i++) {
for (var j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
var temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
} else break;
}
}
};
在第一层for循环中打印一下arr,可以发现每次插入后前面的顺序都已经排好,只需要后续继续插入到已经排好中合适的位置即可。
快速排序
将数组的第一个元素选作中心元素,遍历数组第一位之后的数,比中心元素小的放入左数组中,比中心元素大的放入右数组中,在采用递归的方式又分别将左右数组同样操作,返回连接的左右数组。
var fastSort = (arr) => {
if (arr.length <= 1) {
return arr;
}
var left = [];
var right = [];
var pivot = arr[0];
for (var i = 1; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return fastSort(left).concat([pivot], fastSort(right));
};
下图为每次递归的中心元素位置