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

一、排序

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);
	}
}
相关推荐
风筝在晴天搁浅2 小时前
代码随想录 718.最长重复子数组
算法
kyle~2 小时前
算法---回溯算法
算法
star _chen2 小时前
C++实现完美洗牌算法
开发语言·c++·算法
hzxxxxxxx3 小时前
1234567
算法
Sylvia-girl3 小时前
数据结构之复杂度
数据结构·算法
CQ_YM3 小时前
数据结构之队列
c语言·数据结构·算法·
VekiSon3 小时前
数据结构与算法——树和哈希表
数据结构·算法
xu_yule4 小时前
数据结构与算法(1)(第一章复杂度知识点)(大O渐进表示法)
数据结构
大江东去浪淘尽千古风流人物5 小时前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
fish_xk5 小时前
数据结构之排序
数据结构