蓝桥杯国赛备赛复习——基础算法

一、排序

1.1 快速排序

java 复制代码
package 排序;

import java.util.Scanner;

public class 快速排序 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		int []a = new int[110];
		int n = scan.nextInt();
		for(int i=0;i<n;i++)
			a[i] = scan.nextInt();
		Q_sort(a,0,n-1);
		for(int i=0;i<n;i++)
			System.out.print(a[i]+" ");
	}
	static void Q_sort(int a[],int l,int r) {
		if(l>=r) return;
		int x = a[l];
		int i = l - 1;
		int j = r + 1;
		while(i<j) {
			do i++; while(a[i]<x);
			do j--; while(a[j]>x);
			if(i<j) {
				int t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
		Q_sort(a,l,j);
		Q_sort(a,j+1,r);
	}
}

1.2 归并排序

java 复制代码
package 排序;
import java.util.*;
public class 归并排序 {
	static int []tmp = new int[110];	//辅助数组
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		int []a = new int[110];
		int n = scan.nextInt();
		for(int i=0;i<n;i++)
			a[i] = scan.nextInt();
		Merge_sort(a,0,n-1);
		for(int i=0;i<n;i++)
			System.out.print(a[i]+" ");
	}
	static void Merge_sort(int []a,int l,int r) {
		// 递归退出条件
		if(l>=r)	return;
		// 分
		int mid =  l + r >> 1;
		Merge_sort(a,l,mid);
		Merge_sort(a,mid+1,r);
		// 合
		int ans=0,x=l,y=mid+1;
		while(x<=mid&&y<=r)
			if(a[x]<=a[y])	tmp[ans++] = a[x++];
			else  tmp[ans++] = a[y++];
		while(x<=mid) tmp[ans++] = a[x++];
		while(y<=r) tmp[ans++] = a[y++];
		for(int i=l,pos=0;i<=r;i++) a[i] = tmp[pos++];
	}
}

二、二分

2.1 整数二分

java 复制代码
package 二分;
import java.util.*;
public class 整数二分 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 模板1
		int l = 1,r = 1,mid;
		while(l<r) {
			mid = (l+r)/2;
			if(check(mid)) r = mid;
			else l = mid+1;
		}
		// 模板1
		while(l<r) {
			mid = (l+r+1)/2;
			if(check(mid)) l = mid;
			else r = mid-1;
		}
	}
	static boolean check(int x) {
		return true;
	}
}

2.2 浮点二分

java 复制代码
package 二分;

public class 浮点二分___平方根 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int x =4;
		double l = 0,r = x;
		while((r-l) > 1e-8) {
			double mid = (l+r)/2;
			if(mid*mid>=x) r = mid;
			else l = mid;
		}
		System.out.print(l);
	}
}
相关推荐
用户484526255821 小时前
搜索旋转排序数组:必有一侧是有序的
排序算法
用户484526255821 小时前
翻转二叉树:前序和后序的写法完全一样
排序算法
用户484526255821 小时前
对称二叉树:左子树的左和右子树的右对比
排序算法
鱼鱼不愚与4 小时前
《原来如此 | 第01期:为什么导航软件能预测红绿灯倒计时?》
算法
复杂网络8 小时前
论最小 Agent 计算机的形态
算法
kisshyshy1 天前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
猿人谷1 天前
不只是 CPU 阈值:STAR 如何用 GAT + Transformer 做容器级自动扩缩容?
人工智能·算法
复杂网络1 天前
Stable Diffusion 视觉大模型微调技术深度调研
算法
复杂网络1 天前
基于 Stable Diffusion 架构的视觉大模型代表性工作与原理深度解析
算法
MrZhao4001 天前
Agent Loop 如何用 Hook 扩展:权限、日志与工具拦截
算法