首页 > 编程语言 >基础算法:快速排序、归并排序

基础算法:快速排序、归并排序

时间:2023-09-16 20:13:12浏览次数:55  
标签:mergeSort 归并 int qksort mid while 算法 排序

1、快速排序

#include <iostream>
using namespace std;

const int N = 1e5 + 10;
int n, q[N];

void qksort(int q[], int l, int r) {
    if (l >= r) return;

    int x = q[l], i = l - 1, j = r + 1;
    while (i < j) {
        do i++; while (q[i] < x);
        do j--; while (q[j] > x);
        if (i < j) swap(q[i], q[j]);
    }
    
    qksort(q, l, j), qksort(q, j + 1, r);
}

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &q[i]);

    qksort(q, 0, n - 1);
    
    for (int i = 0; i < n; i++) printf("%d ", q[i]);

    return 0;
}

 

2、归并排序

#include <iostream>
using namespace std;

const int N = 1e5 + 10;
int n, q[N], tmp[N];

void mergeSort(int q[], int l, int r) {
    if (l >= r) return;
    
    int mid = (l + r) >> 1;
    mergeSort(q, l, mid), mergeSort(q, mid + 1, r);
    
    int k = 0, i = l, j = mid + 1;
    while (i <= mid && j <= r) {
        if (q[i] <= q[j]) tmp[k++] = q[i++];
        else tmp[k++] = q[j++];
    }
    while (i <= mid) tmp[k++] = q[i++];
    while (j <= r) tmp[k++] = q[j++];

    for (i = l, j = 0; i <= r; i++, j++) q[i] = tmp[j];
}

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &q[i]);
    
    mergeSort(q, 0, n - 1);
    
    for (int i = 0; i < n; i++) printf("%d ", q[i]);

    return 0;
}

 

标签:mergeSort,归并,int,qksort,mid,while,算法,排序
From: https://www.cnblogs.com/karinto/p/17707223.html

相关文章

  • java递归算法
    当解决问题时,递归是一种常用而强大的算法技术。在Java中,递归是指方法调用自身的过程。它可以用于解决许多问题,特别是与算法和数据结构有关的问题。在本博客中,我们将详细介绍Java中的递归算法,并提供一些具体的代码示例。什么是递归?递归的基本概念和特点递归是指方法在其定义中......
  • 代码随想录算法训练营第十天
    代码随想录算法训练营第十天|LeetCode20(有效的括号)LeetCode1047(删除字符串中的所有相邻重复项)LeetCode150(逆波兰表达式求值)20:有效的括号LeetCode20(有效的括号)方法一importjava.util.Stack;classSolution{publicbooleanisValid(Strings){......
  • tortoise-orm 使用雪花算法生成主键ID
    importtimefromtortoiseimportTortoise,fields,run_asyncfromtortoise.modelsimportModelfromtypingimportAnyclassSnowflake:def__init__(self,machine_id:int):"""生成雪花算法ID:parammachine_id:机器ID......
  • 拓扑排序
    有向图的拓扑排序算法JAVA实现 一,问题描述给定一个有向图G=(V,E),将之进行拓扑排序,如果图有环,则提示异常。要想实现图的算法,如拓扑排序、最短路径……并运行看输出结果,首先就得构造一个图。由于构造图的方式有很多种,这里假设图的数据存储在一个文件中,每一行包含如下的信息:Lin......
  • lecode算法题 小总结
    .......1打印9x9乘法表#python版foriinrange(1,10):forkinrange(1,i+1):print(f'{i}X{k}\t',end='')print('\n')------------------#c版#include<stdio.h>intmain(){inti;......
  • 38-列表-排序-revered逆序-max_min_sum
               迭代器只能用一次,以时间换空间      ......
  • 机器学习算法原理实现——adaboost,三个臭皮匠顶个诸葛亮
    adaboost算法的基本原理是什么?举一个简单的例子说明呢 AdaBoost(AdaptiveBoosting)是一种集成学习方法,其基本原理是结合多个弱学习器来构建一个强学习器。AdaBoost的工作方式如下:权重初始化:给定一个训练数据集,首先为每个训练样本分配一个权重,开始时这些权......
  • Manacher——最快的找最长回文算法
    Manacher马拉车——Manacher算法解决的问题给定一串字符串str,求str内的最长回文子串,我们可以从最朴素的算法开始,逐渐深入Manacher算法。朴素穷举法一直枚举字符串str的子串,并判断子串是否为回文。这个时间复杂度直接到\(O(n^3)\)了,一般题目都会超时。中心扩散法作为一个回文......
  • 银行家舍入法(金额算法,也用于电商系统计算金额)
    一、简单来说就是:四舍、六入、五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。 二、详细来说:1:小于等于四,直接舍去该位2:大于等于六,向前位进一3:等于五3.1:五后有数,向前位进一3.2:五后全零3.2.1:五前位数值为......
  • 排序查询
      ......