7.25 C/C++蓝桥杯 |排序算法【下】

接上文的冒泡排序和选择排序:7.24 C/C++蓝桥杯 | 排序算法-CSDN博客

插入排序

插入排序,类似打牌的时候排牌的操作,将新的牌 插入到 前边已经有序的牌之中。

代码:

结果:

快速排序

取其中一个值x,大于x放到x右边,小于x放到x左边,递归。

怎么放? 基准数x,从两边同时向中间扫,左边大于x的与右边小于x的元素交换位置

代码:

归并排序

  1. 分解:将数组不断二分,直到每个子数组只包含一个元素
  2. 合并:将已排序的子数组合并,形成更大的有序数组
java 复制代码
#include<bits/stdc++.h>
uisng namespace std;
const int N=1e5+9;
int a[N];
int main(){
	ios::sysnc_with_stdio(o),cin.tie(0),const.tie(0);
	int n;cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	
	MergeSort(a[],1,n);
	
	for(int i = 1; i <= n; i ++)cout<<a[i] << ' ';
	
	}
void MergeSort(int a[], int l,int j){
	if(l==r)return ;//l=r  即当区间大小为1时,直接返回 ;也就是分解??
	int mid=(l+r)/2;
	MergeSort(a,l,mid);
	MergeSort(a,mid+1,r);
	 
	int pl=l,pr=mid+1,pb=1;//起始索引 
	//有一边没有放完 
	while(pl<=mid||pr<=r){
		if(pl > mid){
			b[pb++]=a[pr++];
		} 
		else if(pr > r){
			b[pb++]=a[pl++];
		}
		else{
			if(a[pl]<a[pr])b[pb++]=a[pl++];
			else b[pb++]=a[pr++];
		}
	}
	for(int i=l;i<=r;i++)a[i]=b[i];
}
//先递归进去,再回溯出来 

有空再更新

相关推荐
2601_949146532 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
在路上看风景2 小时前
19. 成员初始化列表和初始化对象
c++
zmzb01032 小时前
C++课后习题训练记录Day98
开发语言·c++
念风零壹2 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
孞㐑¥3 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
知南x4 小时前
【Ascend C系列课程(高级)】(1) 算子调试+调优
c语言·开发语言
MZ_ZXD0015 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
2的n次方_5 小时前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
A星空1236 小时前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
凡人叶枫6 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发