zoukankan      html  css  js  c++  java
  • Go-快速排序

    package main
    
    import "fmt"
    
    // 快速排序
    // 特征:
    // 		1. 选定一个数,让这个数左边的比这个数小,右边比这个数大
    //		2. 然后这个基数就是已经排好序的,将左边部分和右边部分执行1操作
    //		3. 递归
    // 实现:
    //		1. 难点:
    //			a. 参考数怎么找?
    //			b. 如何让这个数左边的数比这个数小,右边的数比这个数大(最难的部分) => 填坑大法
    //			c. 递归的退出条件
    
    
    // QuickSort 快速排序
    func QuickSort(nums []int, left, right int) {
    	// 1. refer 参考数,一般等于元组中第一个元素
    	refer := nums[left]
    	loopFlag := true
    	// 2. 让这个数左边的比这个数小,右边比这个数大
    	for loopFlag {
    		// 1. 先在右边找比查考数小的数,找到则赋值给左边
    		for {
    			if left == right {
    				// 如果两者相等,意味着目标达成,这个位置的数就是已经拍好序的
    				nums[left] = refer
    				loopFlag = false
    				break
    			}
    			if nums[right] >= refer {
    				right --
    			}  else {
    				// 3. 在右边找到则将值赋值给
    				nums[left] = nums[right]
    				break
    			}
    		}
    
    		// 2. 先在左边找比参考数大的数,赋值给右边
    		for {
    			// 如果两者相等,意味着目标达成,这个位置的数就是已经排好序的
    			if left == right {
    				nums[left] = refer
    				loopFlag = false
    				break
    			}
    			
    			if nums[left] <= refer {
    				left ++
    			} else {
    				// 3. 在右边找到则将值赋值给
    				nums[right] = nums[left]
    				break
    			}
    		}
    	}
    	//fmt.Println(left, right)
    	// 左边部分
    	leftPart := nums[:left]
    	//  右边部分
    	rightPart := nums[right+1:]
    	//fmt.Println("left:", leftPart)
    	//fmt.Println("Right:", rightPart)
    	// 左边不为空则排序
    	if len(leftPart) != 0 {
    		QuickSort(leftPart, 0, len(leftPart)-1)
    	}
    	//  右边不为空则排序,也是递归的退出条件
    	if len(rightPart) != 0 {
    		QuickSort(rightPart, 0, len(rightPart)-1)
    	}
    
    }
    
    func main() {
    	//nums := []int{64, 5, 2, 44, 22, 45, 22, 666 , 22, 77, 3, 64, 74, 74, 73, 22, 43, 23,56, 77, 777}
    	//nums := []int{56, 5, 2, 44, 22, 45, 22, 23, 22, 43, 3, 64, 22}
    	//nums := []int{56, 5, 2, 44, 45, 22, 23, 43, 3, 64}
    	//nums := []int{3, 5, 2, 44, 45, 22, 23, 43}
    	nums := []int{64}
    	//nums := []int{64, 33}
    	//nums := []int{64, 33, 55}
    	QuickSort(nums, 0, len(nums)-1)
    	fmt.Println(nums)
    }
    

      

  • 相关阅读:
    自定义 radio 的样式,更改选中样式
    【Vue中的坑】vue项目中动态绑定src不显示图片解决方法
    js复制内容到剪切板
    js实现鼠标单击或者双击事件
    代码修改shader Properties uniform变量
    关于unity中BindChannels的理解
    shader Category
    Unity手游之路自动寻路Navmesh之高级主题
    Unity手游之路自动寻路Navmesh之入门
    Unity 自动寻路Navmesh之跳跃,攀爬,斜坡
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/14435344.html
Copyright © 2011-2022 走看看