排序算法——快速排序

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)
笃志:“博学而笃志,切问而近思,仁在其中矣。”
弘毅:“士不可以不弘毅,任重而道远。”
止于至善:“大学之道,在明明德,在亲民,在止于至善。”
关注:笃志弘毅,止于至善
原文地址:https://www.cnblogs.com/dzhy/p/10941766.html