算法基础01一快速排序,归并排序,二分

一.排序

1.快速 排序 基于分治

  1. 确定分界点 左 右 中间 随机
  2. 划分区间 左半边<=x >=x在右半边
  3. 递归处理左右两端

cpp 复制代码
#include<iostream>

using namespace std;

const int N = 1e6 +10;

int n;
int q[N];
void quick_sort(int q[],int l,int r)
{
    if(l>=r)return;//边界:只有一个数,或者没有数 不用排序
    int x=q[l],i=l-1,j=r+1; //1.确定分界点2。双指针指向边界的两侧 (只要因为指针调整交换往前移动一格)
    while(i<j){
        do i++;while(q[i]<x);
        do j--;while(q[j]>x);
        if(i<j) swap(q[i],q[j]);
    }
    quick_sort(q,l,j);
    quick_sort(q,j+1,r);
}
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&q[i]);
    
    quick_sort(q,0,n-1);
    
    for(int i=0;i<n;i++) printf("%d",q[i]);
    return 0;
}

2.归并---分治

复制代码
二. 二分  
1.确定分界点(中间下表)
2.递归排序左边和右边
3归并 把量有有序的数组合为一个

假设两个有效序列 两个指针指向开头 新数组来存答案

比较两个min 选择最小的微信数组的最小值 假设第一数更小 我们放到新的数组里 然后往后挪一位!

时间复杂度o(n)

cpp 复制代码
#include <iostream>

using namespace std;

const int N = 1e6 + 10;

int n;
int q[N], tmp[N];

void merge_sort(int q[], int l, int r) {
    if (l >= r) return; // 递归边界
    int mid = l + r >> 1;
    merge_sort(q, l, mid); // 递归排序左半部分
    merge_sort(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++];
    }

    // 将排序后的部分复制回 q
    for (int i = 0; i < k; i++) {
        q[l + i] = tmp[i];
    }
}

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &q[i]);
    }
    
    merge_sort(q, 0, n - 1);
    
    for (int i = 0; i < n; i++) {
        printf("%d ", q[i]); // 输出格式调整,添加空格
    }
    printf("\n"); // 输出换行
    
    return 0;
}

整数二分

本质:有单调性一定可以二分 可以二分不一定就有单调性

如何选择用那个模板

给二分问题如何考虑 :1.写check 2.如何更新

找mid 然后check函数

相关推荐
tingshuo29172 分钟前
R001 记忆化搜索 ABCPATH - SPOJ 有方向的搜索
笔记
袁气满满~_~4 分钟前
深度学习笔记七
笔记
智者知已应修善业6 分钟前
【51单片机8位密码锁】2023-2-22
c语言·经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
枷锁—sha18 分钟前
【CTFshow-pwn系列】03_栈溢出【pwn 056-057】详解:32位 与64位Shellcode 与 Linux 系统调用底层原理剖析
linux·运维·网络·笔记·安全·网络安全·系统安全
测试_AI_一辰22 分钟前
AI测试工程笔记 04:Codex + Playwright 自动修复 UI 自动化脚本
人工智能·笔记·自动化
MOON404☾27 分钟前
R语言EDA学习笔记
笔记·学习·数据分析·r语言·eda
IT界的老黄牛36 分钟前
【IT老齐098 笔记】京东实例讲解如何进行系统架构容量评估
笔记·系统架构
sealaugh3241 分钟前
react native(学习笔记第一课)环境构筑(hello,world)
笔记·学习·react native
菩提小狗42 分钟前
第20天:信息打点-红蓝队自动化项目&资产侦察&企查产权&武器库部署&网络空间__笔记|小迪安全2023-2024|web安全|渗透测试|
笔记·安全·自动化
pop_xiaoli44 分钟前
effective-Objective-C-详解Block底层
笔记·ios·objective-c·cocoa·xcode