数字的排序

简介: 原理:(升序)将一串乱序数组中的数字元素进行相邻两两比较,如果第一个数字大于第二个数字,进行交换。然后继续进行第二个和第三个比较,如果第二个数比第三个数大,进行交换,反之则继续下一次比较。数组进行第一次全数组比较将得到数组中最大的数字放在数组最后。

C语言中的数字排序法有很多:


1.冒泡排序法


2.选择排序法


3.比较排序法


4.快速排序法


......


冒泡排序法


原理:(升序)将一串乱序数组中的数字元素进行相邻两两比较,如果第一个数字大于第二个数字,进行交换。然后继续进行第二个和第三个比较,如果第二个数比第三个数大,进行交换,反之则继续下一次比较。数组进行第一次全数组比较将得到数组中最大的数字放在数组最后。然后进行第二次数组大比较,减去第一轮得到的最大数字得到第二大的数字放到数组倒数第二位。以此类推,将乱序数组由小到大排序。


以下为实践程序


#include<stdio.h>
void cmd(int num[])
{
  int a = 1;
  int i = 0;
  int t;
  for (i = 1; i < 10; i++)
  {
    for (int j = 0; j < 10 - i; j++)
    {
      if (num[j] > num[j + 1])
      {
        a = 0;
        t = num[j];
        num[j] = num[j + 1];
        num[j + 1] = t;
      }
    }
    if (a == 1)
      break;
  }
}
int main(void)
{
  int num[10];
  for (int i = 0; i < 10; i++)
  {
    scanf("%d", &num[i]);
  }
  cmd(num);
  for (int i = 0; i < 10; i++)
  {
    printf("%d ", num[i]);
  }
  return 0;
}

447550111b944f098338b2c289e45882.png


479ca20fb88d4e72b5178d452a47a48b.png


选择排序法


原理:(升序)将乱序数组从将第一个数字确定与后面的数字挨个比较,如果第一个数字比后面比较的数大就交换,反正则继续比较,第一次全部比较完得到最小的数字在第一位。进行第二轮比较,从第二个数开始,与后面的数进行比较得到第二小的数放在第二位。以此类推则可得到升序的数组。


见代码


#include<stdio.h>
void cmd(int num[])
{
  int t;
  for (int i = 0; i < 9; i++)
  {
    for (int j = i + 1; j < 10; j++)
    {
      if (num[i] > num[j])
      {
        t = num[j];
        num[j] = num[i];
        num[i] = t;
      }
    }
  }
}
int main(void)
{
  int num[10];
  for (int i = 0; i < 10; i++)
  {
    scanf("%d", &num[i]);
  }
  cmd(num);
  for (int i = 0; i < 10; i++)
  {
    printf("%d ", num[i]);
  }
  return 0;
}

a26b9b270e124e4894907c2b8aca906d.png

762cd2252c8c4694bad87ea4f315d950.png


比较排序法


原理:(升序) 在一个乱序数组中,先将第一个数的下标记住,然后和剩下的数字进行比较,如果第一个数大于剩下的数,将大于第一个数的角标进行交换,找到最小数的角标后,如果不在第一位时,则将位置互换,将最小的数字放到最左边,以此类推,将得到完整升序数列。


见代码:


#include<stdio.h>
void cmd(int* p)
{
  int t;
  int a;
  for (int i = 0; i < 10; i++)
  {
    a = i;
    for (int j = i; j < 10; j++)
    {
      if (p[a] > p[j])
        a = j;
    }
    if (a != i)
    {
      t = p[i];
      p[i] = p[a];
      p[a] = t;
    }
  }
}
int main(void)
{
  int num[10];
  for (int i = 0; i < 10; i++)
  {
    scanf("%d", &num[i]);
  }
  cmd(num);
  for (int i = 0; i < 10; i++)
    printf("%d ", num[i]);
  return 0;
}


8ee84ad0b172434daf85fb8725e24a9b.png


以上是三种比较常见的C语言排序方法!!!  

目录
相关文章
|
移动开发 前端开发
RN运行项目Error:Unable to resolve module
RN运行项目Error:Unable to resolve module
1259 0
RN运行项目Error:Unable to resolve module
|
10月前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
150488 32
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
309 3
|
9月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【注意力机制篇】| 2023 MCAttention 多尺度交叉轴注意力 获取多尺度特征和全局上下文信息
YOLOv11改进策略【注意力机制篇】| 2023 MCAttention 多尺度交叉轴注意力 获取多尺度特征和全局上下文信息
344 1
YOLOv11改进策略【注意力机制篇】| 2023 MCAttention 多尺度交叉轴注意力 获取多尺度特征和全局上下文信息
|
10月前
|
存储 传感器 监控
《探秘鸿蒙Next:模型轻量化的能源效益衡量之道》
在鸿蒙Next生态中,模型轻量化显著提升设备能源效益。通过功耗指标(CPU、GPU、整体设备)、运行时间与能耗比值、电池续航(实际场景和极端测试)、散热情况(温度变化、散热能耗)及资源占用(内存、存储)的综合衡量,可全面评估轻量化模型对能源效率的优化效果,为设备性能提升提供依据。
319 10
《探秘鸿蒙Next:模型轻量化的能源效益衡量之道》
|
11月前
|
SQL 运维 大数据
轻量级的大数据处理技术
现代大数据应用架构中,数据中心作为核心,连接数据源与应用,承担着数据处理与服务的重要角色。然而,随着数据量的激增,数据中心面临运维复杂、体系封闭及应用间耦合性高等挑战。为缓解这些问题,一种轻量级的解决方案——esProc SPL应运而生。esProc SPL通过集成性、开放性、高性能、数据路由和敏捷性等特性,有效解决了现有架构的不足,实现了灵活高效的数据处理,特别适用于应用端的前置计算,降低了整体成本和复杂度。
|
计算机视觉 Python Windows
OpenCV自动裁剪图片
OpenCV自动裁剪图片
267 1
|
网络安全 Python
pycharm连接云服务器#潞晨cloud
Luchencloud采用SSH密钥对连接,需先在本地生成公钥并添加到平台
351 0
|
机器学习/深度学习 编解码 缓存
【Pytorch】利用PyTorch实现图像识别
【Pytorch】利用PyTorch实现图像识别
976 1
|
自然语言处理 Java 编译器
用了那么久的Lombok,你知道它的原理么?
在写Java代码的时候,最烦写setter/getter方法,自从有了Lombok插件不用再写那些方法之后,感觉再也回不去了,那你们是否好奇过Lombok是怎么把setter/getter方法给你加上去的呢?有的同学说我们Java引入Lombok之后会污染依赖包,那我们可不可以自己写一个工具来代替Lombok呢?
用了那么久的Lombok,你知道它的原理么?