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];
}
//先递归进去,再回溯出来 

有空再更新

相关推荐
syagain_zsx1 小时前
jsoncpp 使用指南:编译链接、Json::Value 取值与高频坑
c++·json·库·http格式
布莱克6052 小时前
理解 = delete 与 = default:两种赋值语义的差异
c++
知识分享小能手2 小时前
C学习教程,从入门到精通,C语言文件 — 完整知识点详解(14)
c语言·网络·学习
羊羊一洋3 小时前
ROM&RAM
c语言·stm32·学习
小小、码农3 小时前
[特殊字符]【C++11】类的新功能全面解析:移动构造、移动赋值、default、delete、final 与 override
linux·开发语言·网络·c++
库玛西4 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法
General_G5 小时前
创建型模式—原型(Prototype)模式
c++·设计模式·原型模式
syagain_zsx5 小时前
protobuf 实战:从 .proto 到 C++ 序列化的完整链路
c++·学习·程序人生·谷歌·protobuf
welfare9626 小时前
新号别搞:C++_list
开发语言·c++
xiaoye-duck6 小时前
《C++ 项目:手写大模型接入 SDK》云端 API 调用基础与 Apifox 调试实战
网络·c++·语言模型