算法学习01-基础算法01:排序&&二分

算法学习01:排序&&二分



前言

😊😊😊推荐看这个学习算法:github上的高star项目😊😊😊


在这里插入图片描述

需要记忆的模版:

快速排序

void quick_sort(int q[], int l, int r)
{
	if(l >= r) return;
	
	int x = q[l]; i = l - 1; j = r + 1; 
	while(l < r) {
		do i++; while(q[i] < x);//注意1:do_while至少执行一次 
		do j--; while(q[j] > x);//直到不满足条件才出来 
	}
	quick_sort(q, l, j);
	quick_sort(q, j + 1, r);	
}

归并排序:

void merge_sort(int q[] , int l, int r)
{
	if(l >= r) return;
	
	int mid = l + r >> 2;
	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]) temp[k ++ ] = q[i ++ ];
		else temp[k ++ ] = q[j ++ ];
	while(i <= mid) temp[k ++ ] = q[i ++ ];//注意1:考虑有多有少的情况 
	while(j <= r) temp[k ++ ] = q[j ++ ];
	
	//注意2:将temp数组复制到原数组q 
	for(int i = l, j = 0; i <= r; i++, j++) q[i] = temp[j];	
 } 

整数二分:

int l = 0, r = n - 1; 
while(l < r)
{
	int	mid = (l + r) / 2;
	if(q[mid] >= x) r = mid;//右边 
	else l = mid + 1;
}

while(l < r)
{
	int mid = (l + r + 1) / 2;//注意:需要+1
	if(q[mid] <= x) l = mid;//左边
	else r = mid - 1;
}

浮点数二分

double l = 0, r = x;
while(r - 1 > le-8)//注意1:精度问题 
{
	double mid = (l + r) / 2;
	if(mid * mid >= x) r = mid;
	else l = mid;//注意不是mid + 1
 } 

提示:以下是本篇文章正文内容:

一、排序

1.快速排序

在这里插入图片描述



2.归并排序:

在这里插入图片描述



二、二分

1.整数

在这里插入图片描述



2.浮点数


总结

提示:这里对文章进行总结:
记忆模版!!!

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lennard-lhz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值