• 快速排序


    快速排序

    原理

    通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    过程

    1. 首先,从数组中选择中间一项作为主元。
    2. 创建两个指针,左边一个指向数组第一项,右边一个指向数组最后一项。移动左指针直到我们找到一个比主元大的元素,接着,移动右指针直到找到一个比主元小的元素,然后交换这它们,重复这个过程,直到左指针超过了右指针。这个过程将使得比主元小的值都排在主元之前,而比主元大的值都排在主元之后。
    3. 接着,算法对划分后的小数组(较主元小的值组成的子数组,以及较主元大的值组成的子数组)重复之前的两个步骤,直至数组已完全排序。

    代码

    function sort(array, left, right) {
    	let mid = array[Math.floor((left + right) / 2)],
    		i = left,
    		j = right;
    	while(i <= j) {
    		while(array[i] < mid) {
    			i++;
    		}
    		while(array[j] > mid) {
    			j--;
    		}
    		if(i <= j) {
    			[array[i], array[j]] = [array[j], array[i]];
    			i++;
    			j--;
    		}
    	}
    	return i;
    }
    
    function quicksort(array, left, right) {
    	if(array.length <= 1) {
    		return;
    	} else {
    		let index = sort(array, left, right);
    		if(left < index - 1) {
    			quicksort(array, left, index - 1);
    		}
    		if(index < right) {
    			quicksort(array, index, right);
    		}
    	}
    }
    
    
    let array = [4,5,1,6,2,7,3,8];
    quicksort(array, 0, array.length - 1);
    console.log(array)
    
  • 相关阅读:
    什么时候用GET?什么时候用POST?
    Oracle存储过程in、out、in out 模式参数
    oracle的spool功能
    xshell-常用命令
    js Date()日期函数浏览器兼容问题解决方法
    spring-quartz
    spring-quartz普通任务与可传参任务
    MySQL服务安装和可视化工具安装
    PL/SQL Developer 查询的数据有乱码或者where 字段名=字段值 查不出来数据
    Windows下安装Redis服务
  • 原文地址:https://www.cnblogs.com/1328497946TS/p/14907738.html
Copyright © 2020-2023  润新知