/**
* 插入算法
* 从第2个元素开始如果比上一个元素小,上面的元素位置都往后挪移位,该元素放在最前面
* */
function insertSort(numArr) {
for(let i=1; i<numArr.length; ++i){
if(numArr[i] < numArr[i-1]){
let temp = numArr[i];
let j = i;
while (j > 0 && numArr[j - 1] >= temp){
numArr[j] = numArr[j-1]
j--;
}
numArr[j] = temp;
}
}
}
/**
* 快排
* 以一个元素为基准分成比他大和小的两个部分,将这个元素放中间,递归下去
* */
function quickSort(array){
function swap(array,i,j) {
let temp = array[i];
array[i] = array[j];
array[j] = temp;
}
function segmentation(array,left,right) {
let index = left;
let temp = array[right];
for(let i = left; i < right; ++i){
if(array[i] < temp){
swap(array,index,i);
index++;
}
}
swap(array,right,index);
return index;
}
function sort(array,left,right) {
if(left > right){
return;
}
console.log('before:',array);
let index = segmentation(array,left,right);
console.log('after:',array);
sort(array,left,index - 1);
sort(array,index + 1, right);
}
sort(array, 0, array.length - 1);
return array;
}
// let testArr = [1,2,6,7,8,9,4,3];
// console.log(mergeSort(testArr));
/**
* 归并
* 将数组一直查分下去,然后组合排序
* */
function mergeSort(array) {
function swap(array,i,j) {
let temp = array[j];
let k = j;
while (k > i) {
array[k] = array[k-1];
k--;
}
array[i] = temp;
}
function split(array,startIndex,endIndex) {
if(startIndex < endIndex){
let midIndex = startIndex + Math.floor((endIndex - startIndex)/2);
split(array,startIndex,midIndex);
split(array,midIndex+1,endIndex);
merge(array,startIndex,midIndex,endIndex);
}
}
function merge(array,startIndex,midIndex,endIndex) {
let i = startIndex;
let j = midIndex + 1;
let k = 0;
let temp = [];
while (i < midIndex + 1 && j < endIndex + 1){
if(array[i] < array[j]){
temp[k++] = array[i++];
}
else{
temp[k++] = array[j++];
}
}
while (i != midIndex + 1){
temp[k++] = array[i++];
}
while (j != endIndex + 1){
temp[k++] = array[j++];
}
temp.forEach((tmp,index)=>{
array[startIndex+index] = tmp;
});
}
split(array,0,array.length - 1);
return array;
}
常用算法js用法(插入 ,快排,归并)
最新推荐文章于 2024-04-24 10:59:09 发布