数据结构与算法——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;
}
相关推荐
浅念-1 天前
C语言——双向链表
c语言·数据结构·c++·笔记·学习·算法·链表
轩情吖1 天前
数据结构-图
数据结构·c++·邻接表·邻接矩阵·最小生成树·kruskal算法·prim算法
Wh-Constelltion1 天前
【PQ分解法潮流计算(matlab版)】
算法·matlab
Prince-Peng1 天前
技术架构系列 - 详解Redis
数据结构·数据库·redis·分布式·缓存·中间件·架构
zhuqiyua1 天前
第一次课程家庭作业
c++
只是懒得想了1 天前
C++实现密码破解工具:从MD5暴力破解到现代哈希安全实践
c++·算法·安全·哈希算法
码农水水1 天前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展
m0_736919101 天前
模板编译期图算法
开发语言·c++·算法
玖釉-1 天前
深入浅出:渲染管线中的抗锯齿技术全景解析
c++·windows·图形渲染
【心态好不摆烂】1 天前
C++入门基础:从 “这是啥?” 到 “好像有点懂了”
开发语言·c++