zoukankan      html  css  js  c++  java
  • 排序算法:图解快速排序算法--不超过18行代码Python和JavaScript实现快速排序算法

    快速排序有三大要素 分别是

      第一:找基准值--key 

     第二:分区

     第三:比较数字大小

    先来看下快速排序流程: 基准值key选取了第一个元素78 基准值是可以任意一个元素

    因为选择了最左边的数据,那么就从右边开始遍历

    经过上一轮变化key变成了78 位置也变了,开始从key的左边遍历,当 i=j的时候,结束遍历,开始分区

    分区后,每个区再进行上面的比较

    继续分区,直到分区里面只有两个或者3个元素,分区后,每个分区继续比较

    现在每个分区已经最小了,获得最后排列的值

     

     Python实现过程(正序),一共13行代码

    def quickSortASC(nums,start,end):
        #start 和 end用于 分区,当start=end的时候不进行递归
        if start < end:
            i,j = start,end
            key = nums[i]
            while i < j:
                while (i<j) and (key<=nums[j]):
                    j = j-1
                #交换
                nums[i],nums[j] = nums[j],nums[i]
                while (i<j) and (key>=nums[i]):
                    i=i+1
                #交换
                nums[j],nums[i] = nums[i],nums[j]
            #nums[i] = key
            #开始递归
            quickSortASC(nums,start,i)
            quickSortASC(nums,i+1,end)

    调用

    if __name__ == "__main__":
        num_arr = [23, 34, 544, 234, 54, 554, 78, 656]
        quickSortASC(num_arr,0,len(num_arr)-1)
        print(num_arr)#[23, 34, 54, 78, 234, 544, 554, 656]

    JavaScript 实现代码

    	function swap_arr(arr,i,j){
    		var  tmp = arr[i]
    		arr[i] = arr[j]
    		arr[j] = tmp
    	}
    	function quickSortASC(nums, start, end) {
    		if(start < end) {
    			var i = start
    			var j = end
    			var poit = nums[start]
    			console.log(i, j, poit)
    			while(i < j) {
    				while(i<j&&poit<=nums[j]){
    					j--
    				}
    				swap_arr(nums,i,j)
    				while(i<j&&poit>=nums[i]){
    					i++
    				}
    				swap_arr(nums,i,j)
    			}
    			quickSortASC(nums,start,i)
    			quickSortASC(nums,i+1,end)
    		}
    	}
    	
    	num_arr = [23, 34, 544, 234, 17, 554, 78, 656]
    	quickSortASC(num_arr,0,7)
    	console.log(num_arr)//17,23,34,78,234,544,554,656
    
  • 相关阅读:
    简单的运动框架——分享给初学者
    Python数据分析学习日志(1. 书单)
    mysql恢复数据参考
    window cmd 杀掉 java.exe 进程
    转载: Ajax关于readyState和status的讨论
    开发问题bug记录
    vue基础part10
    vue基础part9
    vue基础part(7-8)
    vue基础part(4-6)
  • 原文地址:https://www.cnblogs.com/lelexiu/p/10219158.html
Copyright © 2011-2022 走看看