排序基础---插入排序
插入排序是一种比较排序。
选出一个临时变量tmp.
然后弄一个end,end最初可以是0.
那么tmp便应该是a[end+1]
最终的目的是为了使一个序列有序,所以应该让tmp依次与前[0,end],进行比较最后插入到合适的位置。
cpp
void insert_sort(int* a, int n)
{
for (int i = 0; i < n - 1; ++i)
{
int end = i;
int tmp = a[end + 1];
while (end >= 0)
{
if (a[end] > tmp)
{
a[end + 1] = a[end];
}
else
{
break;
}
--end;
}
a[end + 1] = tmp;
}
}
这里有一个易错点,就是执行else跳出循环。
因为会有两种情况需要将tmp插入到a[end+1]的位置。
情况1:
while循环完全执行完成,此时end<0,实际上就是在数组的最前面插入。及在a[0]插入。
情况2:
while循环并没有完全执行完成,是由于break,跳出了while循环。
此时是在a[end+1]的位置将数字插入。
所以应该注意while循环。
在c++中开辟二维数组
vector开辟
cpp
vector<vector<int>> maze(N, vector<int>(M));
使用vector 开辟优点
使用std::vector
的好处是内存管理更加安全,不需要手动管理内存的分配和释放。
maze.size()为其行数。
maze[0].size()可以访问其列数。
new用算符开辟
cpp
int** maze=new int*[N];
for(int i=0;i<N;++i)
{
maze[i]=new int[M];
}
释放:
cpp
for(int i=0;i<N;++i)
{
delete[] maze[i];
}
delete[] maze;