C++算法

要期末了,做点笔记吧QwQ

1、递归算法

递归算法:是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

递归过程一般通过函数或子过程来实现。

递归算法的实质:是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。

递归算法解决问题的特点:

  递归就是在过程或函数里调用自身。
  在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
  递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
  在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。(这一段是copy的)

至于工作原理要涉及堆和栈,太抽象了会不了一点,直接跳过

例题:

已知C(m,n)表示从m个元素中取n个的组合数,又知C(m,n)=C(m-1,n)+C(m-1,n-1);C(m,m)=1;C(m,1)=m;

请递归求出组合问题的解

下面是程序

#include <iostream>

// 函数原型声明
long long combination(int m, int n);

int main() {
    int m, n;
    std::cin >> m >> n; // 输入m和n
    std::cout << combination(m, n) << std::endl; // 输出组合数C(m, n)
    return 0;
}

// 组合数函数实现
long long combination(int m, int n) {
    if (m == n) return 1; // C(m, m) = 1
    if (m == 1) return n; // C(1, n) = n
    if (n == 0) return 1; // C(m, 0) = 1
    if (n == 1) return m; // C(m, 1) = m

    // 递归计算
    return combination(m - 1, n) + combination(m - 1, n - 1);
}
2、排序算法
最典的冒泡排序
#include<iostream>
using namespace std;

int main()
{

	int arr[9] = { 4,2,8,0,5,7,1,3,9 };

	cout << "排序前" << endl;
	for (int i = 0; i < 9; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;

	for (int i = 0; i < 9 - 1; i++)
	{
		for (int j = 0; j < 9 - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
    }
	for (int i = 0; i < 9; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
system("pause");
return 0;
}

我的评价是味大,无需多盐

选择排序法

选择排序详解(Selection sort)-优快云博客

例:用选择排序法对十个数排序(从小到大)

算法:首先在未排序序列中找到最小元素,存放在排序序列的起始位置。 再从剩余未排序元素中寻找最小元素,然后存放在已排列序列的末尾

#include<iostream>
using namespace std;

void selection_sort(int* arr, int len)
{
	int min;//存放最小值的下标
	for (int i = 0; i <= len; i++)
	{
		min = i;//初始化选取假设的最小值,选取的是未排序序列的第一个数
		for (int j = i; j <= len; j++)
		{
			if (arr[j] < arr[min])//如果遇见更小值,则记录最小值下标
			{
				min = j;
			}
		}
		//内循环退出,确定了最小值
		//将最小值移动到已排列序列的末尾
		int tmp = arr[i];
		arr[i] = arr[min];
		arr[min] = tmp;
	}
}
int main()
{
	int arr[] = { 5,0,1,8,6,2,3,4,9,7 };
	int len = sizeof(arr) / sizeof(int);
	for (int i = 0; i <= len - 1; i++)
	{
		cout << arr[i] << endl;
	}
	cout << endl;
	cout << "排序后的数值:";
	selection_sort(arr, len - 1);
	for (int i = 0; i <= len - 1; i++)
	{
		cout << arr[i] << " ";
	}
}

剩下的学了再补喵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值