使用JavaScript实现冒泡排序,插入排序和快速排序
冒泡排序
- 让数组的当前项和后一项进行比较
- 如果当前项大于后一项,则交换两项的位置
let ary = [12, 15, 24, 18, 3]
function bubble(arr) {
for(let i = 0; i < arr.length; i++) {
for(let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] - arr[j + 1] > 0) {
let temp = arr[j + 1]
arr[j + 1] = arr[j]
arr[j] = temp
}
}
}
return arr
}
ary = bubble(ary)
console.log(ary); // 3 12 15 18 24
插入排序
- 准备一个空数组,开始一个个的接收目标数组的值
- 在第一轮开始后的每一轮,将新插入的值与数组中每一项
- 进行比较,再排序
let ary = [14, 9, 23, 11, 18];
function insert(arr) {
let handle = []
handle.push(arr[0])
for(let i = 1; i < arr.length; i++) {
let A = arr[i]
for(let j = handle.length - 1; j >= 0; j--) {
let B = handle[j]
if (A > B) {
handle.splice(j + 1, 0, A)
break
}
if (j === 0) {
handle.unshift(A)
}
}
}
return handle
}
ary = insert(ary)
console.log(ary); // 9 11 14 18 23
快速排序
- 获取中间项,并将它从数组中移除,并准备两个空数组
- 剩余的每项对比中间项,小的放左边数组,大的放右边数组
- 递归调用执行此操作,直到全部分离成一个个单独元素的数组
- 将所有的单元素数组进行拼接
let ary = [3, 15, 27, 9, 18, 20];
function quick(arr) {
if (arr.length <= 1) {
return arr
}
let middleIndex = Math.floor(arr.length / 2)
let middleValue = arr.splice(middleIndex, 1)[0]
let arrRight = []
let arrLeft = []
for(let i = 0; i < arr.length; i++) {
let item = arr[i]
item < middleValue ? arrLeft.push(item) : arrRight.push(item)
}
return quick(arrLeft).concat(middleValue, quick(arrRight))
}
console.log(quick(ary)); // 3 9 15 18 20 27