数据结构与算法——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;
}
相关推荐
uhakadotcom14 分钟前
快速开始使用 n8n
后端·面试·github
uhakadotcom15 分钟前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom19 分钟前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom21 分钟前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom30 分钟前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom40 分钟前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试
探索为何2 小时前
JWT与Session的实战选择-杂谈(1)
后端·面试
怒放吧德德3 小时前
MySQL篇:MySQL主从集群同步延迟问题
后端·mysql·面试
算AI4 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
uhakadotcom4 小时前
MQTT入门:轻量级物联网通信协议
后端·面试·github