1.冒泡排序
省略
2.快排
/**
* 分治算法:先设置一个中轴元素,然后将序列中小于中轴元素的放置到序列左侧,大于的放置到右侧,然后再对两侧的序列分别进行递归快排
* @param {*} nums
*/
function quickSort(nums,left,right){
if(left < right){
let mid = partition(nums, left, right)
//进行分割
nums = quickSort(nums, left, mid - 1)
nums = quickSort(nums, mid + 1, right)
}
return nums
}
function partition(nums,left,right){
let pivot = nums[left]
let i = left + 1
let j = right
while(true){
while (i <= j && nums[i] <= pivot) i++;
while (i <= j && nums[j] > pivot) j--
if(i>=j) break
[nums[i],nums[j]] = [nums[j],nums[i]]
}
nums[left] = nums[j]
nums[j] = pivot
return j
}
let sort = [21,12,34,67,25,46,52,19]
quickSort(sort,0,sort.length - 1)
console.log(sort)
3.插排
function insertSort(nums){
if(!nums || nums.length < 2 ) return nums
for(let i = 1; i < nums.length ; i ++ ){
let j = i - 1
while(j >= 0 && nums[j] >= temp) j --
for(let k=i; k > j + 1; k--){
nums[k] = nums[k-1]
}
nums[j+1] = temp;
}
return nums
}
let sort = [21,12,34,67,25,46,52,19]
insertSort(sort)
console.log(sort)
4.选择排序
function selectSort(nums){
for(let i=0;i<nums.length -1;i++){
let min = i
for(let j = i + 1; j< nums.length ; j++){
if(nums[min] > nums[j]) min = j
}
[nums[i],nums[min]] = [nums[min],nums[i]]
}
return nums
}
let sort = [21,12,34,67,25,46,52,19]
selectSort(sort)
console.log(sort)