首页 > 其他分享 >c语言实现交换法排序

c语言实现交换法排序

时间:2024-12-14 16:56:13浏览次数:6  
标签:10 语言 16 调换 交换 排序 交换法 进行

文章目录

介绍

交换法排序是将每一位数与其后的所有数一一比较,如果发现符合条件的数据则交换数据。

思路

具体实现如表格,从表格中可以发现,在第一轮交换排序过程中,先将10和7比较,进行调换(按从小到大排);然后进行7和16的比较,这次则保持;然后进行7和5的比较,进行调换; 然后进行5和3的比较,进行调换,第一轮的交换就完成了,然后将第一轮的结果进行第二轮。

第一轮1071653
初始数组资源【107】1653
第一次排序后【7 】10【16 】53
第二次排序后【7】1016【5】3
第三次排序后【5 】10167【3】
第四次排序后3101675

然后将第一轮交换的结果进行第二轮交换排序。同理,先将10和16比较,这次则保持;然后进行10和7的比较,进行调换;然后进行7和5的比较,进行调换;第二轮的交换就完成了,然后进行下一轮交换。

第二轮3【1016】75
第一次排序后3【10】16【7 】5
第二次排序后3【7】1610【 5 】
第三次排序后3516107

然后将第二轮交换的结果进行第三轮交换排序。同理,先将16和10比较,进行调换;然后进行10和7的比较,进行调换;然后进行下一轮交换。

第三轮35【 1610 】7
第一次排序后35【10】16【7】
第二次排序后3571610

然后将第三轮交换的结果进行第四轮交换排序。同理,先将16和10比较,进行调换;最后就完成了交换法排序(从小到大)。

第四轮357【 1610】
第一次排序后3571016

代码实现

这里的代码看似和冒泡法的代码结构一样,但是两者有细微差距,从思路的分析也可以看出来,这里和冒泡法有着本质的不同,

#include <stdio.h>
int main(){
    int i,j,a[10],temp;
    printf("请先为数组赋值:\n");//先用for循环输入数组
    for(i=0;i<10;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);
    }
    for(i=0;i<9;i++)            //进行循环,完成需要排序的轮数
    {
        for(j=i+1;j<10;j++)
        {
            if(a[i]>a[j])      //选择排序方向,改变符号可以改变方向
            {
                temp=a[i];      //交换两个位置的值
                a[i]=a[j];    //交换两个位置的值
                a[j]=temp;    //交换两个位置的值
            }
        }           
    }
    for(i=0;i<10;i++)           //输出数组
    {
        printf("%d\t",a[i]);
    }
    return 0;   
}

结果

请先为数组赋值:
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
a[5]=6
a[6]=7
a[7]=8
a[8]=9
a[9]=10
1       2       3       4       5       6       7       8       9       10

标签:10,语言,16,调换,交换,排序,交换法,进行
From: https://blog.csdn.net/weixin_69737466/article/details/144458771

相关文章

  • 统计所有地区的人员人数并排序,优化查询速度
    #背景:person_info表存放用户信息中有1千万数据,ID为主键,addr存放省份ID;addr_table表存放省份数据,有34条数据,ID为主键;#统计所有地区的人员人数selectad.name,count(pio.id)aspidfromaddr_tableadinnerjoinperson_infopioonad.id=pio.addrgroupbyad.nameor......
  • 人工智能大语言模型起源篇(二),从通用语言微调到驾驭LLM
    上一篇:《人工智能大语言模型起源篇(一),从哪里开始》(5)Howard和Ruder于2018年发表的《UniversalLanguageModelFine-tuningforTextClassification》,https://arxiv.org/abs/1801.06146这篇论文从历史的角度来看非常有意思。尽管它是在原始的《AttentionIsAllYouNeed......
  • 清华大学出品的《自然语言处理:原理、方法与应用》硬核书 |含PDF
    前言人工智能自然语言处理领域的发展也经历了很多大事件,有预测蛋白质结构的alphafold模型、有1750亿参数量的超大无比GPT3屠榜自然语言处理各个任务的榜单,也有实现增量推理与分布式推理的盘古预训练模型。总体来讲,自2018年底谷歌公司发布BERT预训练模型后,自然语言处理领域......
  • C语言(动态内存分配)
    动态内存分配我们要想实现动态内存分配,就需要学习标准C提供的函数库(API):函数所属的库文件函数的原型-函数的声明函数名形参返回值类型函数功能注意:内存分配函数在申请内存时,建议用多少申请多少,可以有少量的预留量;但不能越界访问(虽然编译和运行不报错,但是数据不安全(野......
  • C语言(野指针及内存操作)
    野指针、空指针、空悬指针野指针定义:指向一块未知区域(已经销毁或者访问受限的内存区域外的已存在或不存在的内存区域)的指针,被称作野指针。野指针是危险的。危害:①引用野指针,相当于访问了非法的内存,常常会导致段错误(segmentationfault),也有可能编译运行不报错。②引......
  • 使用 Crystal 编程语言实现验证码识别自动化流程
    说明Crystal是一种静态类型的、编译型编程语言,具有类似Ruby的语法,但提供了更高的性能和效率。它是一种面向开发高性能应用程序的语言,且在web编程中也有应用。我们将使用Crystal来实现一个模拟的验证码处理流程。代码实现假设我们在进行一个自动化测试任务,需要处理图......
  • Go 语言新手入门:快速掌握 Go 基础
        Go语言(又叫Golang)是一种由Google开发的开源编程语言,设计初衷是简洁、高效,并且能够处理大规模并发程序。Go语言自发布以来,逐渐在Web开发、云计算、微服务和系统编程等领域获得了广泛应用。它以简单的语法、内置的并发模型和高效的性能赢得了开发者的青睐。 ......
  • java学习,数组排序
    Java数组进行排序,可以使用多种方法。常用的方法,包括使用内置的Arrays.sort() 方法和手动实现一些基本排序算法。Arrays.sort()方法Java提供了内置的Arrays.sort()方法,可以非常方便地对数组进行排序importjava.util.Arrays; publicclassArraySortExample{ ......
  • 在21世纪的我用C语言探寻世界本质——动态内存管理及相关笔试题
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录一、为什么有动态内存分配二、malloc和free1.malloc函数的使用2.free函数的使用三、calloc和realloc1.calloc函数的使用2.realloc函数的使用四、常见动态内存分配的错误五、动态内存经典笔试题六、总结C/C++中程序内存区......
  • 02-51单片机的C语言基础与最小系统
    C语言基础一个简单的单片机C程序要有什么#include<reg51.h>voidmain(){ while(1) { }}C语言中常用语句略,if,while,do…while,for,switch…case函数略C-51的数据类型扩充定义sfr:特殊功能寄存器声明sfr变量名=地址值;*特殊功能寄存器在reg51.H这个头文件里......