算法-快速排序

news/2024/11/20 0:28:49/

go快速排序

时间复杂度:O(n²)

空间复杂度:O(Nlog2n)

不稳定,较复杂

过程:

1、设置一个基点,通常为最左边或最右边,下面设置为最左边,设置设置两个指针分别指向数组两端

2、先移动右边指针,如果小于基点的值,则停止移动,并且把值覆盖到最左边的指针的值

3、覆盖之后,把最左边的指针向右移动,如大于几点,则覆盖右边指针的值,直到 左右指针指向相同位置,则把几点赋值到指针所在位置

4、把当前指针所在位置当作中间点,然后拆分左右两段,分别重复(2\3)步骤即可(下面使用递归的方式进行重复处理)

/*** @author Yel* 快速排序* 时间复杂度:O(n²)* 空间复杂度:O(Nlog2n)* 不稳定,较复杂* 过程:* 1\设置一个基点,通常为最左边或最右边,下面设置为最左边,设置设置两个指针分别指向数组两端* 2\先移动右边指针,如果小于基点的值,则停止移动,并且把值覆盖到最左边的指针的值* 3\覆盖之后,把最左边的指针向右移动,如大于几点,则覆盖右边指针的值,直到 左右指针指向相同位置,则把几点赋值到指针所在位置* 4\把当前指针所在位置当作中间点,然后拆分左右两段,分别重复(2\3)步骤即可(下面使用递归的方式进行重复处理)*/
func Quicksort(arr []int, order string) {var length = len(arr)if length < 2 {return}var base = arr[0]                   // 使用左边第一个为基准var left, right int = 0, length - 1 // 设置左右指针for left != right {// 先把右指针向左移动,如果遇到小于基准的值,则覆盖左边位置for left < right {// 升序if order == "asc" {// 右边向左移动,遇到比基准小的,则覆盖左边位置if base > arr[right] {arr[left] = arr[right]break}} else {// 降序if base < arr[right] {arr[left] = arr[right]break}}right--}// fmt.Println(left, right)// 从左向右移动,找到比基准大的,覆盖右边位置for left < right {// 从左向右移动,找到比基准大的,覆盖右边位置// 升序if order == "asc" {if base < arr[left] {arr[right] = arr[left]break}} else {if base > arr[left] {arr[right] = arr[left]break}}left++}// fmt.Println(left, right)}// 指针左右相等,则把基准值放到指针位置arr[left] = base// 对数组左边进行快速排序Quicksort(arr[:left], order)// 对数组右边进行快速排序Quicksort(arr[left+1:], order)
}


http://www.ppmy.cn/news/836865.html

相关文章

蓝牙广播时间设置

1CONN_INTERVAL &#xff08;连接间隔&#xff09; 就是两个连接事件之间的时间间隔&#xff0c;连接间隔以1.25为单位&#xff0c;连接间隔的值为6(7.5ms)~3200(4s).不同的应用可能要求不同的时间间隔。长的时间间隔的优势是显著地节省功耗&#xff0c;因为设备可以在连接事件…

【蓝牙模块】多主多从蓝牙模块介绍

蓝牙模块测试&#xff1a;多主多从模块测试步骤 FR8016HA_Module 透传模块介绍蓝牙模块测试&#xff1a;多主多从测试*有需要的可以联系&#xff1a;13631472459*模块图片 FR8016HA_Module 透传模块介绍 FR8016HA_Module模块是一款工业 级射频无线产品&#xff0c;支持蓝牙5.0…

Android 9 原生设置关于蓝牙设置(三)

开启关闭蓝牙 参考&#xff1a;https://www.jianshu.com/p/a150d55e29ca 开启过程 参考“Setting关于蓝牙的界面”&#xff0c;开启和关闭蓝牙的switchbar的监听状态是BluetoothEnable类&#xff0c;当打开switchbar时&#xff1a; LocalBluetoothAdapter.setBluetoothEnab…

Android 9 原生设置关于蓝牙设置(一)

原生设置中关于蓝牙设置相关的类 BluetoothSettings.java 该类是蓝牙配置和连接管理界面&#xff0c;就是咱们常见的蓝牙界面。它管理着蓝牙界面的加载&#xff0c;蓝牙搜索&#xff0c;蓝牙连接&#xff0c;蓝牙重命名等管理功能。(顺便借用一下大牛做的图片&#xff1a;http…

HC-06蓝牙模块设置和使用方法

HC-06的设置方法 1.给蓝牙上电 给HC-06上电之后&#xff0c;HC-06的指示灯会不停地闪烁&#xff0c;这个时候就标志着进入AT模式了 2.有线串口连接 这时&#xff0c;可以选择有线串口连接的方式&#xff0c;将单片机和电脑连接起来&#xff0c;假设使用的是51开发板 3.蓝牙引脚…

Android 9 原生设置关于蓝牙设置(四)

蓝牙打开后Setting界面变化及蓝牙搜索 参考&#xff1a;蓝牙扫描流程 蓝牙打开后&#xff0c;BluetoothManagerService发出BluetoothAdapter.ACTION_STATE_CHANGED广播&#xff0c;Setting应用里面有很多地方注册接收该广播。其中settings/bluetooth/BluetoothEventManager.ja…

CSR8811蓝牙音频发射一拖二解决方案

随着蓝牙技术的发展以及市场产品的多样化&#xff0c;越来越多的产品及应用场景需要用到蓝牙音频发射&#xff0c;比如后装车载中控、电摩仪表、便携式CD/DVD市场等。车载中控不拆原车主机&#xff0c;改装的系统声音通过蓝牙模块发射给原车主机&#xff0c;声音从原车功放输出…

如何把你的蓝牙耳机同时同地给两台不同的设备使用

如何让两台设备同时使用同一个蓝牙耳机 问题描述操作说明声明 问题描述 当你和舍友一起去跑步或者是一起去图书馆学习&#xff0c;但是只带了一副耳机&#xff0c;这个时候怎么办&#xff0c;如何让你们两个的播放设备都能连接这副耳机的其中一个&#xff0c;且播放各自的内容…