数据结构与算法——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;
}
相关推荐
郝学胜-神的一滴8 小时前
深入解析C++命令模式:设计原理与实际应用
开发语言·c++·程序人生·软件工程·命令模式
ShineSpark8 小时前
Crashpad介绍
c++·windows
Jasmine_llq8 小时前
《P2656 采蘑菇》
算法·强连通分量·广度优先搜索(bfs)·tarjan 算法·图的缩点操作·有向无环图(dag)·最长路径
芥子沫8 小时前
《人工智能基础》[算法篇3]:决策树
人工智能·算法·决策树
mit6.8248 小时前
dfs|位运算
算法
苏纪云8 小时前
算法<C++>——双指针 | 滑动窗口
数据结构·c++·算法·双指针·滑动窗口
保持低旋律节奏8 小时前
算法——二叉树、dfs、bfs、适配器、队列练习
算法·深度优先·宽度优先
Y200309168 小时前
U-net 系列算法总结
人工智能·算法·目标跟踪
代码不停8 小时前
Java二分算法题目练习
java·算法