A=[0,1,2,7,8,9,10],B=[0,1,3,5,7,8,11],两个数组已经排序好,将这两个数组排序好放到C数组中。不能用sort等函数;
1.ABC只能遍历一次
2.至少两个方法
睡眠排序(这个不怎么用啊,只是觉得好玩)
function lazySort(list) {
//1.创建保存结果空数组
const result = []
// 遍历数组并执行setTimeout
list.forEach((el) => {
setTimeout(() => {
result.push(el)
}, [el])
})
return result
}
希尔排序
基本细想:希尔排序, 开始取数组长度一 半的长度 进行替换,循环一遍后取一半的一半,取的长度为2 时, 排序完成
function xier(arr) {
//分组
let interval = parseInt(arr.length/2) //分组间隔设置 取整
// 第一个while 判断是否有分组
while(interval > 0) {
for(let i=0; i< arr.length; i++) {
let n = i;
//第二while判断是否大于并插入
while(arr[n] < arr[n-interval] && n > 0) {
let temp = arr[n];
arr[n] = arr[n-interval]
arr[n-interval] = temp // 向后移
n = n - interval
}
//继续分组
interval = parseInt(interval/2)
}
}
return arr
}
插入排序
基本思想:将数组第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。
function inserSort(arr) {
for(let i = 0; i < arr.length; i++) {
let n = i
while(arr[n] > arr[n+1] && n >= 0) {
let temp = arr[n];
arr[n] = arr[n+1];
arr[n+1] = temp;
n--;
}
}
return arr
}
选择排序
基本思想:首先在未排序数组中找到最小(大)元素,存放在数组的起始位置。 再从剩余数组元素中继续寻找最小(大)元素,返回放在已排序数组的末尾重复第二步,直到所有元素都排序完成
function chooseSort(arr) {
let temp
for(let i = 0; i < arr.length; i++) {
for(let j = i+1; j < arr.length; j++) {
if(arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j]
arr[j] = temp;
}
}
}
}
冒泡排序
基本思想:一次比较两个相邻的数,如果不符合规则互换位置,一次比较就能够将最大或最小的值放在数组最后一位继续对除【最后一位】之外的所有元素重复上述过程
function bubbingSort(arr) {
let temp=''
for(let i = 0; i < arr.length; i++) {
for(let j = 0; j < arr.length - 1; j++) {
if(arr[j] > arr[j+1]]) {
temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
return arr
}