C语言丨交换法排序

程序员在程序设计时常常需要对存储在数组中的大量数据进行处理,如排序、查找等。排序是把一系列无序的数据按照特定的顺序(如升序或降序)重新排列为有序序列的过程。对数据进行排序是最重要的应用之一。实际生活中的很多问题都需要对数据进行排序。这次我们就来介绍一种最简单的排序法:交换法排序


交换法排序借鉴了求最大、最小值的思路。以降序排列为例,其排序的基本过程为:首先进行第一轮比较,参与比较的数有n个,将第一个数分别与后面所有的数进行比较,若后面的数较大,则交换后面这个数和第一个数的位置

第一遍
8483888761

如上表中,第一个数为84,84和83比较,84>83,进行下一次循环;84<88,将84与88互换位置,于是变成:

8883848761

之后第一个数变为88,进行下一次循环;由于后面的数都比88小,故第一轮比较结束。

这一轮比较结束以后,就求出了一个最大的数放在了第一个数的位置。然后进入第二轮比较,参与比较的数变为n-1个,在这n-1个数中再按上述方法求出一个最大的数放在第二个数的位置。

第二遍
8883848761

如上表中,第二个数为83,83和84比较,83<84,将83与84互换位置,于是变成:

8884838761

之后第二个数变为84,进行下一次循环,与87进行比较,而84<87,故将84与87互换位置,变为:

8887838461

此时第二个数变为87,下一轮循环中87>61,不改变,故第二轮比较结束。

然后进入第三轮比较……依此类推,直到第n-1轮比较,参与比较的数变为2个,求出一个最大的数放在第n-1个数的位置,剩下的最后一个数自然就为最小的数,放在数列的最后

n个数总共需要n-1轮比较,由于每一轮比较都新排出一个数,因此每一轮余下的待比较的数都相对于上一轮减少了一个。按交换法进行降序排序的程序如下:

int array[n] = {...};//假设n是常量
for (int i = 0; i < n-1; i++)
{
    for (int j = i+1; j < n; j++)
    {
        if (array[j] > array[i])
        {
            int temp = array[j];
            array[j] = array[i];
            array[i] = temp;
        }
    }
}

若进行升序排序,只需把if中的语句改为array[j] < array[i]即可。


整个算法的核心,其实就是使用循环遍历整个数组,使每个值一一进行比较,进而找出它们之间的相互大小关系。但由于这种方法过于冗杂,效率不高,因此较少使用。


参考文献:

苏小红 赵玲玲 孙志岗 王宇颖 等编著 蒋宗礼 主审,C语言程序设计(第4版),高等教育出版社,P203-205.

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值