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

一、排序

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);
	}
}
相关推荐
qqxhb1 分钟前
零基础数据结构与算法——第四章:基础算法-排序(中)
数据结构·算法·排序算法·归并·快排·堆排
木叶丸1 小时前
编程开发中,那些你必须掌握的基本概念
前端·数据结构·编程语言
Y1nhl1 小时前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
qq_401700412 小时前
C语言中位运算以及获取低8位和高8位、高低位合并
c语言·开发语言·算法
CoovallyAIHub2 小时前
YOLO模型优化全攻略:从“准”到“快”,全靠这些招!
深度学习·算法·计算机视觉
闻缺陷则喜何志丹2 小时前
【BFS】 P10864 [HBCPC2024] Genshin Impact Startup Forbidden II|普及+
c++·算法·宽度优先·洛谷
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
今天背单词了吗9803 小时前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
手握风云-3 小时前
优选算法的链脉之韵:链表专题
数据结构·算法·链表
Coding小公仔3 小时前
LeetCode 151. 反转字符串中的单词
开发语言·c++·算法