一、冒泡排序
思路1:a) 比较两个相邻的元素,如果后一个比前一个大,则交换位置
b) 第一轮的时候最后一个元素应该是最大的一个
c) 按照第一步的方法进行两个相邻的元素的比较,由于最后一个元素已经是最大的了,所以最后一个元素不用比较
// 冒泡排序1
function sortArr1(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]) {
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return arr
}
console.log(sortArr1([7, 3, 4, 8, 9, 6, 4, 1]))
console.log(sortArr1([3, 5, 1, 2, 7, 8, 4, 5, 3, 4]))
思路2:a) 比较两个相邻的元素,如果后一个比前一个大,则交换位置
b) 第一轮的时候第一个是最小的
// 冒泡排序2 把小的元素往前调,大的往后调
function sortArr(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
let temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
}
return arr
}
console.log(sortArr([7, 3, 4, 8, 9, 6, 4, 1]))
console.log(sortArr([3, 5, 1, 2, 7, 8, 4, 5, 3, 4]))
二、快速排序
冒泡排序在实际的工作中如果数据量过大,数组比较复杂,通过两次遍历,同时会带来性能上的问题。
因此可以用快速排序的方法进行解决,快速排序对冒泡排序的一种改进。
思路:a) 获取数组的中位数作为对比值,并将该值从原数组中剔除。
b) 循环比较,第一次排序的时候将原数组元素分为两个部分。
若数组元素比该对比值大,则存储在大的部分,否则存储在小的部分
c) 然后递归调用,在两边都实行快速排序。
// 快速排序法
function softSortArr(arr) {
let rightArr = []
let leftArr = []
if (arr.length <= 1) {
return arr
}
let index = Math.floor(arr.length / 2)
let temp = arr.splice(index, 1)[0]
for (let i = 0; i < arr.length; i++) {
if (arr[i] > temp) {
rightArr.push(arr[i])
} else {
leftArr.push(arr[i])
}
}
return softSortArr(leftArr).concat([temp], softSortArr(rightArr))
}
console.log(softSortArr([7, 3, 4, 8, 9, 6, 4, 1]))
console.log(softSortArr([3, 5, 1, 2, 7, 8, 4, 5, 3, 4]))