插入排序
思路:向有序的区域中插入一个新元素,仍保持有序。
- 初始时,0索引的元素是有序的
- 从1索引的元素开始插入 a. 比较当前要插入的元素key和有序区域的最后一个元素 i:如果当前的key要大,就直接插入 ii:如果当前的key要小,就在有序区域中找到一个合适的位置插入 (一边找,一边向后赋值)
c
#include <stdio.h>
//插入排序
void sort_insert(int arr[], int len){
for (int i = 1; i < len; i++)
{
int j = i;
int key = arr[j];
while (j > 0 && key < arr[j - 1]){
arr[j] = arr[j - 1];
j--;
}
arr[j] = key;
}
}
int main()
{
int arr[10] = {10, 3, 2, 5, 7, 2, 9, 2, 1, 8};
int len = sizeof(arr) / sizeof(arr[0]);
sort_insert(arr, len);
for (int i = 0; i <= len - 1; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
二维数组
- 也称为矩阵
- 二维数组打印 下面的%4d是指4位数,可以让矩阵对齐
c
#include <stdio.h>
int main(){
int arr[3]={1,2,3};//一维
int arr2[2][3]={{1,2,3},{4,5,6}};//二维
printf("%d\n",arr2[1][2]);
for(int i=0;i<2;i++){//行
for(int j=0;j<3;j++){//列
printf("%4d ",arr2[i][j]);
}
printf("\n");
}
arr2[0][0]=10;
printf("%d\n",arr2[0][0]);
return 0;
}
- 二维数组翻转
c
#include <stdio.h>
void swap(int arr[][3], int m, int n)
{
for(int i = 0; i <m;i++){
for(int j = 0; j < n; j++){
if(j>i){
int temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
}
}
int main()
{
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
swap(arr, 3, 3);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%4d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
矩阵转置
c
#include <stdio.h>
int main()
{
int arr[2][3] = {{1, 2, 3},{4, 5, 6}};
int arr2[3][2];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++)
{
arr2[i][j] = arr[j][i];
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
printf("%4d ", arr2[i][j]);
}
printf("\n");
}
return 0;
}
扫雷
c
#include <stdio.h>
int main()
{
char arr1[4][4] = {{'*', '.', '.', '.'}, {'.', '.', '*', '.'}, {'.', '.', '.', '.'}, {'*', '.', '.', '.'}};
char arr2[4][4];
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (arr1[i][j] == '*')
{
arr2[i][j] = '*';
}
else
{
int count = 0;
for (int x = i - 1; x <= i + 1; x++)
{
for (int y = j - 1; y <= j + 1; y++)
{
if (x >= 0 && x < 4 && y >= 0 && y < 4 && arr1[x][y] == '*')
{
if (arr1[x][y] == '*')
{
count++;
}
}
}
}
arr2[i][j] = count + '0';
}
}
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%c ", arr2[i][j]);
}
printf("\n");
}
return 0;
}