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语言内存划分
- 堆区:程序员想存放什么就放什么
- 栈区:存放局部变量及函数入口地址
- 常量区:存放常量(字符常量、数字常量、字符串)
- 代码区:存放代码
- 全局区(静态区):存放全局变量和静态变量
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;
}