数据结构与算法——1202—排序&&递归

1、选择排序

复制代码
#include<iostream>
#include<vector>
using namespace std;

void SelectSort(vector<int>& nums)
{
	int i;
	int j;
	int minIndex;
	int length = nums.size();
	if (length == 0 || length == 1) return;
	for (i = 0; i < length-1; i++)//遍历所有元素
	{
		minIndex = i;//设以趟数为下标的元素就是此次遍历中最大的元素
		for (j = i+1; j < length; j++)	//每个元素和最大值进行比较,找最小值
		{
			if (nums[j] < nums[minIndex])
			{
				minIndex = j;	//找到最大值
			}
		}
		swap(nums[i], nums[minIndex]);
	}
}

void Print(vector<int>nums)
{
	int length = nums.size();
	for (int i = 0; i < length; i++)
	{
		cout << nums[i] << "   " ;
	}
}

int main()
{
	vector<int>nums = { 10,55,67,89,36,29,77 };
	SelectSort(nums);
	Print(nums);
	return 0;
}

2、插入排序

插入排序无交换

插入排序是一个元素从无序数组向有序数组中插入的过程

(1)保存无序元素

(2)从右向左遍历有序数组,比较有序元素和当前元素的大小关系

如果有序元素比当前保存的元素大,那么说明当前保存的元素应该再向前比较,有序元素应该向后移动一个,再重复当前步骤

如果有序元素小,此次遍历结束

如果遍历有序元素的下标到达-1的位置上,应该把当前元素放在有序元素数组下标为0的位置上

复制代码
#include<iostream>
#include<vector>
using namespace std;

void InsertSort(vector<int>&nums)
{
	int length = nums.size();
	//int cur=1;	//无序的个数
	int i;	//无序元素的左边界
	int j ;	//有序元素的右边界
	for (int i = 1; i < length; i++)	//遍历无序数组
	{
		int save = nums[i];		//临时存储将要插入有序元素中的无序元素中的值
		j = i - 1;				//有序元素的右边界为无序元素的左边界-1
		while (j >= 0 &&nums[j]>save)	//从右向左遍历有序数组
		{
			nums[j + 1] = nums[j];	//交换两个元素
			j--;
		}
		nums[j + 1] = save;			//将元素插入到有序元素右侧
	}
}

void Print(vector<int>&nums)
{
	int length = nums.size();
	for (int i = 0; i < length; i++)
	{
		cout << nums[i] << "   ";
	}
}

int main()
{
	vector<int>nums = { 5,69,88,35,46,51 };

	InsertSort(nums);
	Print(nums);

	return 0;
}

3、C语言内存划分

  1. 堆区:程序员想存放什么就放什么
  2. 栈区:存放局部变量及函数入口地址
  3. 常量区:存放常量(字符常量、数字常量、字符串)
  4. 代码区:存放代码
  5. 全局区(静态区):存放全局变量和静态变量

4、递归

使用递归的条件

1、解决方案完全相同

2、可以拆成子问题

3、必须有明确的终点

4、计算结果会沿着原路依次返回

斐波那契数列

复制代码
#include<iostream>
#include<vector>
using namespace std;

int func(int n)
{
	if (n == 1)
		return 1;
	if (n == 2)
		return 1;
	return func(n - 1) + func(n - 2);
}

int main()
{

	cout << func(10);

	return 0;
}
相关推荐
木心月转码ing12 分钟前
Hot100-Day10-T438T438找到字符串中所有字母异位词
算法
晴殇i16 分钟前
CommonJS 与 ES6 模块引入的区别详解
前端·javascript·面试
HelloReader1 小时前
Wi-Fi CSI 感知技术用无线信号“看见“室内的人
算法
青青家的小灰灰1 小时前
金三银四面试官最想听的 React 答案:虚拟 DOM、Hooks 陷阱与大型列表优化
前端·react.js·面试
颜酱4 小时前
二叉树分解问题思路解题模式
javascript·后端·算法
zone77394 小时前
001:LangChain的LCEL语法学习
人工智能·后端·面试
zone77394 小时前
001:简单 RAG 入门
后端·python·面试
前端Hardy4 小时前
告别 !important:现代 CSS 层叠控制指南,90% 的样式冲突其实不用它也能解
前端·vue.js·面试
前端Hardy4 小时前
Vue 3 性能优化的 5 个隐藏技巧,第 4 个连老手都未必知道
前端·vue.js·面试
Lee川5 小时前
从回调地狱到同步之美:JavaScript异步编程的演进之路
javascript·面试