当前位置: 首页 > article >正文

快速排序 归并排序

 快速排序(重点)

//quick_sort

void quick_sort(int a,int l,int r)
{
    if(l>=r) return;
    
    int i=l-1,j=r+1;            //所谓的 “ 双 指 针 ”
    int x=a[(l+r)/2];

     while(i<j)
	{    
		do i++;while(a[i]<x);    //不能等于x
		do j--;while(a[j]>x);
		if(i<j)
		{
			swap(a[i],a[j]);    //不合法则交换; 
		} 
	}

	quick_sort(a,l,j);
	quick_sort(a,j+1,r);

}
//算例: 1 3 2 6 5 
//算例: 4 1 4 2 5 

/*划分一个中间数。双指针向中间移动,最后的结果是将数组划分成两个区间;
然后以j为分界线进行划分。
在图中会表现为i和j “ 擦 肩 而 过 ” 
*/

归并排序

//merge_sort

void merge_sort(int a,int l,int r)
{
    if(l>=r) return;
    
   int m=(l+r)/2;
   merge_sort(a,l,m);
   merge_sort(a,m+1,r);
   
   int t[10],k=0;//存储合并之后的结果 
   int i=l,j=m+1;
 
	while(i<=m&&j<=r)
	{
		if(a[i]<a[j]) t[k++]=a[i++];
		else t[k++]=a[j++];
	} 
	
	while(j<=r) t[k++]=a[j++];
	while(i<=m) t[k++]=a[i++];
	
	for(int i=l,j=0;i<=r;i++,j++)  //将原来的数组粘贴到对应的位置当中去
	 
	{
		a[i]=t[j];
	}
}

/*
非常有趣的一个排序:
以m为界限不断的细分(调用自己)
所以在每一次调用的时候都会出现一个新的l和r,
不能再分时:(只有一个元素)先写入数组t[](“排序”),然后在写入上个数组t。
t是一个中间数组,通过写入的方式实现了“排序“。

*/


http://www.kler.cn/a/411460.html

相关文章:

  • 自动化的内存管理技术之垃圾回收机制-JavaScript引用数据内存回收机制
  • 为什么DDoS防御很贵?
  • 亚信安全与飞书达成深度合作
  • Redis-09 SpringBoot集成Redis
  • react项目初始化配置步骤
  • uniapp 地图移入的快,高亮显示两个
  • spring boot框架漏洞复现
  • 《白帽子讲Web安全》13-14章
  • 解决:Openstack创建实例进入控制台报错Something went wrong, connection is closed
  • 6.STM32之通信接口《精讲》之IIC通信---硬件IIC(STM32自带的硬件收发器)
  • Flink cdc同步增量数据timestamp字段相差八小时(分析|解决)不是粘贴复制的!
  • 2024APMCM亚太杯数学建模C题【宠物行业】原创论文分享
  • kali Linux中foremost安装
  • 实现乱序函数?(面试常考)
  • 计算(a+b)/c的值
  • [STM32]从零开始的STM32 FreeRTOS移植教程
  • 运维面试整理总结
  • 2024年11月22日Github流行趋势
  • 基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现九
  • html转成图片
  • 「Mac玩转仓颉内测版29」基础篇9 - 数组类型详解
  • 【论文解读】CVPR 2024 DSL-FIQA :全新人脸面部图像质量评估算法(附论文地址)
  • HPA - k8s自动伸缩机制
  • 2024年11月26日Github流行趋势
  • 推荐一款龙迅HDMI2.0转LVDS芯片 LT6211UX LT6211UXC
  • 1 ISP一键下载