返回介绍

5.5.1 数组排序

发布于 2025-04-11 22:32:58 字数 1870 浏览 0 评论 0 收藏 0

例 5-4 】编写程序,在数组中保存 1~100 的 10 个随机整数,对数组进行升序排序,并将排序后的数组元素打印输出。

根据要求,我们首先定义一个长度为 10 的 int 类型数组 arr,然后通过循环结构 for 语句和 rand 函数来获取 10 个 1~100 的随机整数,并其保存至数组 arr 中。注意,为了得到真正的随机数,我们在 rand 函数之前使用 srand 函数来设置随机数种子。

对于数组元素的排序,我们采用最经典的“冒泡”排序算法,该算法比较简单,并且适合小规模的数组数据排序工作。为了让大家对“冒泡”排序算法有更直观的理解,下面使用一个固定的 5 个整数的待排序序列,作为案例进行演示。

待排序序列为:5、3、7、4、–1。

冒泡排序的升序算法思路为:共进行“元素个数–1”轮的比较过程,每一轮比较过程完成后,都会将当前待排序序列中最大的那个元素移动至最后位置,然后,将这个最后位置的元素排除至待排序序列之外,将剩下的元素组成一个新的待排序序列,并参加下一轮次的比较过程。如此反复,直至所有轮执行完毕,排序工作完成。

下面,再来介绍一下每轮的比较过程:

在待排序序列中,从第一个元素起,让其和第二个元素进行比较,如果第一个元素的值大于第二个元素的值,就让第一个元素和第二个元素进行值的互换。如果第一个元素的值小于等于第二个元素的值,就不做任何操作,继续让第二个元素和第三个元素再进行比较,直至最后位置元素之前的元素和最后位置元素比较完成之后,最后位置元素就是待排序序列中最大的那个。

由于初始待排序序列中有 5 个元素,所以需要进行 4 轮的比较过程才能完成排序工作。图 5.8 展示了每一轮比较过程之后,整个序列的变化情况。

图 5.8 冒泡排序过程

第一轮待排序序列中有 5 个元素,比较过程完成后,值为 7 的元素被移至最后位置,并被排除在待排序序列之外,进入完成序列。

第二轮待排序序列中有 4 个元素,比较过程完成后,值为 5 的元素被移至最后位置,并被排除在待排序序列之外,进入完成序列。

第三轮待排序序列中有 3 个元素,比较过程完成后,值为 4 的元素被移至最后位置,并被排除在待排序序列之外,进入完成序列。

第四轮待排序序列中有 2 个元素,比较过程完成后,值为 3 的元素被移至最后位置,并被排除在待排序序列之外,进入完成序列。

由于待排序序列中只剩一个元素,无须再进行比较,整个排序结束。

从图中可以清晰地看到,值比较大的元素不断下沉,而值小的元素不断上浮,就像鱼儿在水中吐泡泡一样,因此,该排序算法被称为“冒泡”排序算法。

理解了冒泡排序算法后,就可以用它来完成任务了。下面将对数组进行冒泡排序的工作封装成一个函数,函数名为 bubble,该函数无返回值,并带有两个参数:第一个是数组类型的参数 a,用于指定数组的内存位置;第二个是 int 类型的参数 len,用于指示数组的长度。

整个程序的代码如下:

程序运行结果如下:

12 21 53 56 57 74 76 79 81 90

由于程序中使用的是随机值,所以读者在测试的时候,打印输出的结果与本书不一致是正常的。但是,打印输出的结果必须是按升序排列的,这才能达到程序要求,否则程序就是有问题的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。