数据结构与算法——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;
}
相关推荐
计算机小白一个2 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
万事可爱^2 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan
黑不溜秋的2 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
大数据追光猿4 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!4 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
夏末秋也凉4 小时前
力扣-回溯-46 全排列
数据结构·算法·leetcode
南宫生4 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
柠石榴4 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
Leuanghing4 小时前
【Leetcode】11. 盛最多水的容器
python·算法·leetcode
qy发大财4 小时前
加油站(力扣134)
算法·leetcode·职场和发展