28 行代码C++算法模板
插入排序
1-based 下标的插入排序,时间复杂度 O(n²),空间 O(1),稳定
// 升序,数组下标从 1 开始,有效范围为 a[1] ~ a[n]
// 1. 后移法
void insert_sort(int a[], int n) {
for (int i = 2; i <= n; i++) {
int key = a[i];#排序#插入排序
1-based 下标的插入排序,时间复杂度 O(n²),空间 O(1),稳定
// 升序,数组下标从 1 开始,有效范围为 a[1] ~ a[n]
// 1. 后移法
void insert_sort(int a[], int n) {
for (int i = 2; i <= n; i++) {
int key = a[i];1-based 下标的冒泡排序,时间复杂度 O(n²),空间 O(1),稳定
// 升序,数组下标从 1 开始,有效范围为 a[1] ~ a[n]
void bubble_sort(int a[], int n) {
for (int i = 1; i < n; i++) {
bool flag = true;
for (int j = 1; j <= n - i; j++)
if (a[j] > a[j + 1]) {1-based 下标的选择排序,时间复杂度 O(n²),空间 O(1),不稳定
// 升序,数组下标从 1 开始,有效范围为 a[1] ~ a[n]
void select_sort(int a[], int n) {
for (int i = 1; i < n; i++){
int idx = i;
for (int j = i+1; j <= n; j++) {
if (a[j] < a[idx])简单的质数判定代码,时间复杂度 O(sqrt(x))
bool is_prime(int x) {
if (x < 2) return false;
for (int i = 2; i*i <= x; i++)
if (x % i == 0)
return false;
return true;竞赛中,应对整数向上取整的简单方法
// ceil((double)n / a); 限制较多
(n + a - 1) / a;包含了 bigInt 大整数的结构体封装,加法、高精度*单精度乘法、高精度*高精度乘法重载(不考虑负数)
#include <bits/stdc++.h>
using namespace std;
struct bigInt {
int digit[1000] = {0}, len = 0;
// s 的默认值为 “0”,可以不用传参