js ---- 排序(1)
目录
[TOC]
冒泡排序
可以先看动图,如果动图就能够理解的话,就不需要看下面的步骤了。
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比比较
let array = [8, 7, 0, 6, 5]
//第几轮
for (let i = 0; i < array.length; i++) {
for (let j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
let a = array[j]
array[j] = array[j + 1]
array[j + 1] = a
}
}
}
console.log(array);
选择排序
以数列{20,40,30,10,60,50}为例,演示其选择排序过程(如下图)。
重复元素个数减一次
把第一个没有排序过的元素设为最小值
遍历每一个没有排序过的元素(如果元素<现在的最小值),将此元素设为新的最小值
将最小值元素跟第一个没有排序过的位置交换
排序流程如下:
function sleectSort(array) {
let indexMin
for (let i = 0; i < array.length - 1; i++) {
indexMin = i
for (let j = i; j < array.length; j++) {
if (array[j] < array[indexMin]) {
indexMin = j
}
}
if (i != indexMin) {
let a = array[i]
array[i] = array[indexMin]
array[indexMin] = a
}
}
return array
}
console.log(sleectSort(array));
插入排序
1、先拿到第一个元素,认为它是已排序的
2、拿到下一个元素a,与已排序序列从后往前相比
3、如果已排序序列中的元素大于a,则将它的位置往后移一位
4、重复2,3步骤,知道已排序序列中的元素小于等于a
5、将a插入到4布中元素后
function inserShort(array) {
let temp
for (let i = 1; i < array.length; i++) {
let temp = array[i]
let j = i
while (j > 0 && array[j - 1] > temp) {
array[j] = array[j - 1]
j--
}
array[j] = temp
}
return array
}
console.log(inserShort([5, 4, 3, 2, 1]));