c语言:插入排序,二维数组

插入排序

思路:向有序的区域中插入一个新元素,仍保持有序。

  1. 初始时,0索引的元素是有序的
  2. 从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;
}

二维数组

  1. 也称为矩阵
  2. 二维数组打印 下面的%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;
}
  1. 二维数组翻转
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;
}
相关推荐
是翔仔呐3 小时前
第11章 显示外设驱动:I2C协议OLED屏、SPI协议LCD屏字符/图片/中文显示
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
木下~learning5 小时前
对于Linux中等待队列和工作队列的讲解和使用|RK3399
linux·c语言·网络·模块化编程·工作队列·等待队列
是翔仔呐6 小时前
第13章 SPI通信协议全解:底层时序、4种工作模式与W25Qxx Flash芯片读写实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
IT方大同6 小时前
RT_thread(RTOS实时操作系统)线程的创建与切换
c语言·开发语言·嵌入式硬件
是翔仔呐6 小时前
第14章 CAN总线通信全解:底层原理、帧结构与双机CAN通信实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
深邃-7 小时前
数据结构-队列
c语言·数据结构·c++·算法·html5
2301_822782828 小时前
C语言数组通关攻略!从一维到字符数组,零基础也能轻松掌握
c语言·算法·数组·编程基础·避坑技巧
2301_822782829 小时前
C3 vs Zig:2026年,谁才是真正能“修复”C语言的救星?
c语言·zig·c3·系统级开发·语言革新
星夜夏空999 小时前
C语言进阶项目——搭建内存池
c语言·开发语言
聆风吟º10 小时前
【C标准库】深入理解 C 语言memmove函数:安全内存拷贝的利器
c语言·开发语言·memmove·库函数