因为碰到了一些题目 故此来做总结

一维数组

最常用的冒泡排序:
#include<stdio.h>
void sort(int arr[],int n){
    //外层循环
    for (int i = 0; i < n-1; ++i) {
        int flag=1;  //假设flag=1 就是已经排序好的
        //内层循环
        for (int j = 0; j < n-1-i; ++j) {
            //判断升序 赋值
	  //如果是降序的话 把> 改成<即可
            if(arr[j]>arr[j+1]){
                int tem=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tem;
                //如果进行了元素交换 就说明没有排序好
                flag=0;
            }
        }
        if(flag==1){
            break;
        }
    }
}
选择排序:
void SelectSort(int arr[], int n)
{
    for (int i = 0; i < n - 1; i++)
    { // 遍历数组角标为0到最大长度减一的数
        for (int j = i + 1; j < n; j++)
        { // 遍历角标i后面的数
            if (arr[i] > arr[j])
            { // 比较大小,如果前者比后者大则交换两个角标对应的值
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}
插入排序:
void InsertSort(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i]; // 当前要插入的元素
        int j = i - 1;
        // 将大于key的元素向后移动
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key; // 插入key到正确位置
    }
}

二维数组

只需要记住一种 因为之前死记硬背住了冒泡排序
思想就是 二维数组可以当成一维数组 也应用一维数组的冒泡排序
那就关键是两点:
一.n遍历一维数组的大小是啥 当然就是二维数组连续存储的特性 n就是行号*列号

  1. 一维数组数= sizeof(array)/sizeof(array[0]);
  2. 二维数组行数 = sizeof(array)/sizeof(array[0]);
  3. 二维数组列数 = sizeof(array[0])/sizeof(array[0][0]);

二.那一维数组咋接受二维数组啊 这里就需要用指针来接受 然后通过指针移动来比较访问

#include <stdio.h>
void sort(int *p, int n)
{
    // 外层循环
    for (int i = 0; i < n - 1; ++i)
    {
        int flag = 1; // 假设flag=1 就是已经排序好的
        // 内层循环
        for (int j = 0; j < n - 1 - i; ++j)
        {
            // 判断升序 赋值
            // 如果是降序的话 把> 改成<即可
            if (*(p + j) > *(p + j + 1))
            {
                int *tem = *(p + j);
                *(p + j) = *(p + j + 1);
                *(p + j + 1) = tem;
                // 如果进行了元素交换 就说明没有排序好
                flag = 0;
            }
        }
        if (flag == 1)
        {
            break;
        }
    }
    // for(int i=0;i<n;i++){
    // printf("%d ",*(p+i));
    // }
}
void main()
{
    int arr[2][3] = {30, 10, 76, 4, 22, 17};
    int a = sizeof(arr) / sizeof(arr[0]);
    int b = sizeof(arr[0]) / sizeof(arr[0][0]);
    sort(arr, a * b);
    for (int i = 0; i < a; i++)
    {
        for (int j = 0; j < b; j++)
        {
            printf("%d ", arr[i][j]);
        }
    }
}
posted on 2024-12-22 11:11  蒸饺  阅读(50)  评论(0)    收藏  举报