首页 > 其他分享 >78.一维数组和二维数组的排序实现

78.一维数组和二维数组的排序实现

时间:2024-12-22 11:20:51浏览次数:4  
标签:arr 数组 int ++ flag 一维 78

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

一维数组

最常用的冒泡排序:
#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]);
        }
    }
}

标签:arr,数组,int,++,flag,一维,78
From: https://www.cnblogs.com/gaodiyuanjin/p/18621923

相关文章

  • 写一个方法统计给定数组中重复元素的次数
    在前端开发中,你可以使用JavaScript来编写一个方法,用于统计给定数组中重复元素的次数。以下是一个简单的示例:functioncountDuplicates(arr){//创建一个空对象,用于存储元素及其出现的次数constelementCount={};//遍历数组,统计每个元素出现的次数arr.forEach((e......
  • 实现一个数组的push方法
    在JavaScript中,数组已经有一个内置的push方法,用于向数组的末尾添加一个或多个元素,并返回新的长度。但是,如果你想自己实现一个类似的函数,以下是一个简单的方式:Array.prototype.myPush=function(...items){for(letitemofitems){this[this.length]=item;......
  • 实现一个数组的pop方法
    在前端开发中,JavaScript是一种常用的编程语言,它内置了对数组的支持,包括pop()方法。pop()方法用于删除并返回数组的最后一个元素。但是,如果你想自己实现一个pop()方法的话,以下是一个简单的示例:functionmyPop(array){//检查数组是否为空if(array.length===0......
  • Golang学习笔记_13——数组
    Golang学习笔记_10——SwitchGolang学习笔记_11——指针Golang学习笔记_12——结构体文章目录数组1.定义2.访问和修改3.多维数组4.计算数组长度5.数组作为函数参数6.遍历7.数组的内存表示源码数组Go语言中的数组是一种具有固定长度、相同类型元素的集......
  • 88. 合并两个有序数组
    合并两个有序数组给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对......
  • 2024-12-16:使数组中所有元素相等的最小开销。用go语言,给定一个整数数组 nums 以及两个
    2024-12-16:使数组中所有元素相等的最小开销。用go语言,给定一个整数数组nums以及两个整数cost1和cost2,你可以进行以下两种操作多次:1.选择数组中的某个元素的下标i,将nums[i]增加1,花费为cost1。2.同时选择数组中两个不同的下标i和j,将nums[i]和nums[j]都增加......
  • 动态规划算法-----子数组系列
    1.引言动态规划(DynamicProgramming,DP)是一个强大的算法设计方法,广泛应用于解决最优化问题。它的核心思想是通过将大问题分解为小问题,并利用子问题的解来构建大问题的解。动态规划的核心特点是“重叠子问题”和“最优子结构”。在这篇博客中,我们将探讨动态规划算法在解决“......
  • 动态规划算法-子数组系列之_等差数列划分
    413.等差数列划分( Leetcode)等差数列划分题目描述如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子......
  • TIA环境下SCL编程练习:产生m到n之间的随机整数,存入数组
    假设需要读取100个随机数,存入有100个成员的数组。做这个练习是为了学习一下SCL编程。随机数使用系统时钟纳秒数来线性转换。新建项目,选用1500PLC(6ES7513-1AL02-0AB0,当然可以选用其它型号),设定本地时区,建立网络。新建DB,建立变量,取消优化块的访问。 新建FC,先建立内部变量如下......
  • 【多维DP】【准NOI难度】力扣3251. 单调数组对的数目 II
    给你一个长度为n的正整数数组nums。如果两个非负整数数组(arr1,arr2)满足以下条件,我们称它们是单调数组对:两个数组的长度都是n。arr1是单调非递减的,换句话说arr1[0]<=arr1[1]<=…<=arr1[n-1]。arr2是单调非递增的,换句话说arr2[0]>=ar......