• 排序算法——快速排序


    1、算法介绍

     快速排序是一种分而治之的思想。

    (1)从待排序序列找一个元素(一般取第一个元素)作为基准元素

    (2)遍历序列,小于基准元素排在基准元素左边,大于基准元素的排在基准元素右边,相等可随意(不稳定)

    (3)递归基准元素左右两边的序列进行步骤(1)(2),递归结束则排序完成

    2、代码实现

    2.1、golang

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	slice := []int{5, 3, 12, 54, 23, 12, 6, 9, 19}
    	SortQuick(slice)
    	fmt.Println(slice)
    }
    
    //快速排序
    func SortQuick(slice []int) {
    	if len(slice) <= 1 {
    		return
    	}
    	//分而治之,左右开弓
    	//第一个元素作为基准元素,左边从第二元素开始,右边从最后一个元素开始
    	key, left, right := 0, 1, len(slice)-1
    	for left <= right {
    		if slice[left] > slice[key] {
    			slice[left], slice[right] = slice[right], slice[left]
    			right--
    		} else {
    			slice[left], slice[key] = slice[key], slice[left]
    			key++
    			left++
    		}
    	}
    	SortQuick(slice[:key])
    	SortQuick(slice[key+1:])
    }
    

    2.2、python3

    # 快速排序
    def sort_quick(arr, left, right):
        if left >= right:
            return
        # 基准元素下标,左下标,右下标
        key, tempL, tempR = left, left + 1, right
        while tempL <= tempR:
            if arr[tempL] > arr[key]:  # 大的放右边
                arr[tempL], arr[tempR] = arr[tempR], arr[tempL]
                tempR -= 1
            else:  # 小的放左边
                arr[tempL], arr[key] = arr[key], arr[tempL]
                key += 1
                tempL += 1
        sort_quick(arr, left, key - 1)
        sort_quick(arr, key + 1, right)
    
    
    if __name__ == '__main__':
        arr = [5, 3, 12, 54, 23, 12, 6, 9, 19]
        sort_quick(arr, 0, len(arr) - 1)
        print(arr)
    
    笃志:“博学而笃志,切问而近思,仁在其中矣。”
    弘毅:“士不可以不弘毅,任重而道远。”
    止于至善:“大学之道,在明明德,在亲民,在止于至善。”
    关注:笃志弘毅,止于至善
  • 相关阅读:
    Java知多少(81)框架窗口基础
    Java知多少(80)图形界面设计基础
    Java知多少(79)哈希表及其应用
    Java知多少(78)Java向量(Vector)及其应用
    Java知多少(中)
    Java知多少(77)日期和时间类
    Java知多少(76)语言包(java.lang)简介
    Java知多少(75)Object类
    Java知多少(74)基础类库
    Java知多少(73)文件的压缩处理
  • 原文地址:https://www.cnblogs.com/dzhy/p/10941766.html
Copyright © 2020-2023  润新知