常用排序方法(这里就不写空间复杂度和时间复杂度了。就是用的时间和占的内存)
1.冒泡排序
function bubbleSort(arr){
let temp
for(let i=0;i<arr.length-1;i++){
let flag = false
for (let j = 0; j < arr.length-1; j++) { //length-1 是因为每次最大的值位置就固定了
if(arr[j]>arr[j+1]){
temp= arr[j]
arr[j]=arr[j+1]
arr[j+1] =temp
flag = true
}
}
if(!flag){ //当flag 为false 代表内循环已经比完 最后一次外循环就没比较 直接return
return arr
}
}
}
2.快速排序
function quickSort(array){
if(array.length<=1) return array;
let base_num = array[0] //找一个基准数,你可以找第一个 也可以找中间的
let left_arr = [] //左数组
let right_arr = [] //右数组
for(let i=1;i<array.length; i++){ //循环和基准数比较 小于base_num 的放left_arr 反则right_arr
if(array[i]<base_num){
left_arr.push(array[i])
}else{
right_arr.push(array[i])
}
}
if(left_arr.length>1) left_arr = quickSort(left_arr); //这是递归
if(right_arr.length>1) right_arr = quickSort(right_arr);
return left_arr.concat(base_num,right_arr) //直到 左右数组都只有一个的时候 将其连接
}
3.归并排序
function merge(leftArr, rightArr){
var result = [];
while (leftArr.length > 0 && rightArr.length > 0){
if (leftArr[0] < rightArr[0])
result.push(leftArr.shift()); //把最小的最先取出,放到结果集中
else
result.push(rightArr.shift());
}
return result.concat(leftArr).concat(rightArr); //剩下的就是合并,这样就排好序了
}
function mergeSort(array){
if (array.length == 1) return array;
var middle = Math.floor(array.length / 2); //求出中点
var left = array.slice(0, middle); //分割数组
var right = array.slice(middle);
// console.log(mergeSort(left))
return merge(mergeSort(left), mergeSort(right)); //递归合并与排序
}
4.待续。。。
网友评论