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

server/2024/10/22 9:03:03/

一.排序
1.快速 排序 基于分治

  1. 确定分界点 左 右 中间 随机
  2. 划分区间 左半边<=x >=x在右半边
  3. 递归处理左右两端
    在这里插入图片描述
    在这里插入图片描述
#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)
在这里插入图片描述

#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++];}// 将排序后的部分复制回 qfor (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.如何更新


http://www.ppmy.cn/server/38041.html

相关文章

k8s集群部署

部署k8s集群 要求&#xff1a; 主机192.168.199.149&#xff08;master&#xff09;node节点&#xff08;192.168.199.150,192.168.199.151&#xff09;2个cpu或更多 所有机器可以联网&#xff0c;湖湘之间可以ping同&#xff0c;关闭防火墙&#xff0c;selinux&#xff0c;…

如何实现网页上3D模型的展示、浏览和互动?

实现网页上3D模型的展示、浏览和互动&#xff0c;可以通过以下步骤进行&#xff1a; 1、创建3D内容&#xff1a;使用3ds max、Maya、blender、C4D等3D软件制作好3D模型。 2、设计3D应用&#xff1a;把制作好的模型导出为fbx、obj、dae、gltf、glb等格式文件&#xff0c;上传到…

懒洋洋作业讲解

懒洋洋作业讲解 环境配置 1.软件下载&#xff1a;DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2app、流应用、HTML5、小程序开发、跨平台App、多端框架 2.软件介绍 HBuilder是由DCloud&#xff08;数字天堂&#xff09;推出的一款面向HTML5的Web开发…

5分钟速通大语言模型(LLM)的发展与基础知识

✍️ 作者&#xff1a;哈哥撩编程&#xff08;视频号同名&#xff09; 博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#x1f3c6; 推荐专栏&#xff1a; &#x1f3c5; 程序员&#xff1a;职场关键角色通识宝…

VUE----数字增加,兼容小程序

数字增加&#xff0c;兼容小程序 requestAnimationFrame 为浏览器提供的方法 export function countUp(duration, from, to, onProgress) {let value fromconst speed (to - from) / durationconst start Date.now()if (typeof window undefined) {let requestAnimationF…

华为OD机试【求满足条件的最长子串的长度】(java)(100分)

1、题目描述 给定一个字符串&#xff0c;只包含字母和数字&#xff0c;按要求找出字符串中的最长&#xff08;连续&#xff09;子串的长度&#xff0c;字符串本身是其最长的子串&#xff0c;子串要求&#xff1a; 只包含1个字母(a-z, A-Z)&#xff0c;其余必须是数字&#xf…

面试中算法(2的整数次幂)

判断一个正整数是否是2的整数次幂&#xff08;如16是2的4次方&#xff0c;返回true;18不是2的整数次幂&#xff0c;则返回false&#xff09;&#xff0c;要求性能尽可能高。 使用一个整型变量&#xff0c;让它从1开始不断乘以2&#xff0c;将每一次乘2的结果和 目标整数进行比较…

STM32微秒级别延时--F407--TIM1

基本配置&#xff1a; TIM1挂载在APB2总线上&#xff0c;150MHz经过15分频&#xff0c;得到10MHz计数频率&#xff0c;由于disable了自动重装载&#xff0c;所以只需要看下一次计数值是多少即可。 void TIM1_Delay_us(uint16_t us) //使用阻塞方式进行延时&#xff0c;ARR值不…