算法分析之快速排序算法,c++实现

拼命三郎
• 阅读 540

算法分析之快速排序算法,c++实现

快速排序算法分析

算法分析之快速排序算法,c++实现
如图所示,数组开始是无序的,从两端开始比较,找到中间值,然后以中间值为中心点,进行分段

第一次划分

算法分析之快速排序算法,c++实现
然后再从每一段中重复此操作,直到只剩下分段长度为1结束,即i>=j则结束

实现

// # 快速排序,将一个数组,找到一个中间值,然后以这个中间值为中心,分段
// # 然后再从每一段中重复此操作,直到只剩下分段长度为1结束,即i>=j则结束 
// 1.  定义一个分段函数,参数分别是arr(待排序数组),begin(起点),end(终点)
// 2. 初始化函数值 i = begin; j = end;
// 3. 从右往左找,i不变,j--;如果arr[i] > arr[j],交换arr[i]和arr[j]的值,然后交换移动位置,j不变,i--;
// 4. 反复操作,直到i >= j;结束算法并返回i

#include<iostream>
using namespace std;
// 排序算法,arr数组,begin起点下标,end终点下标  
int sortArr(int arr[], int begin, int end) {
    int i = begin, j = end;
    while(i < j) {
        while(i < j && arr[i] <= arr[j]) j--;
        if (i < j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        while(i < j && arr[i] <= arr[j]) i++;
        if (i < j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    return i;
}
// 分段方法,arr数组,begin起点下标,end终点下标 
void quilckSort(int arr[], int begin, int end) {
    if (begin < end) {
        int middle = sortArr(arr, begin, end);
        quilckSort(arr, begin, middle - 1);
        quilckSort(arr, middle + 1, end);
    }
}

int main() {
    int arr[] = {0, 9, 8, 6, 1, 5, 4, 12, 15, 3, -2};
    int len = sizeof(arr) / 4;
    quilckSort(arr, 0, len - 1);
    for (int i = 0; i < len; i++) {
        cout<< arr[i] << " ";
    }
    return 0;
} 
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
似梦清欢 似梦清欢
2年前
排序算法(冒泡、快速、插入)
稳定性:排序前后相等的元素位置是否会被交换。冒泡排序strcpy只能拷贝字符串,整型或浮点型数组需要用memcpy。memcpy称为内存拷贝接口,可以将某一段连续的内存放入另一段连续的内存中。在使用随机数的代码中使用固定的数组有利于调试。:::tipmem
威尔we 威尔we
4年前
golang 之快速排序
1、快速排序稳定性快速排序是不稳定的算法,它不满足稳定算法的定义。算法稳定性假设在数列中存在aiaj,若在排序之前,ai在aj前面;并且排序之后,ai仍然在aj前面。则这个排序算法是稳定的!2、快速排序
徐小夕 徐小夕
4年前
程序员必备的几种常见排序算法和搜索算法总结
前言最近为了巩固一下自己的算法基础,又把算法书里的基本算法刷了一遍,特地总结一下前端工程师需要了解的排序算法和搜索算法知识,虽然还有很多高深算法需要了解,但是基础还是要好好巩固一下的.本文将以图文的形式为大家介绍如下算法知识,希望在读完之后大家能有所收获:冒泡排序及其优化选择排序插入排序归并排序快速排序顺序搜索二分搜索
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
PHP算法:冒泡排序与快速排序
写一个排序算法,可以是冒泡排序或者快速排序,假设待排序对象是一个二维数组。(提示:不能使用系统已有函数,另外请仔细回忆以前学习过的基础知识)//冒泡排序<brfunctionbubble_sort($array)
{
&nbsp;&nbsp;<br$countcount($array);
&nbsp;&nb
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
拼命三郎
拼命三郎
Lv1
永远怀揣浪漫情怀。
文章
2
粉丝
0
获赞
0