两种常见排序(冒泡排序和选择排序)详解

一、冒泡排序

1.1、冒泡排序的原理讲解。

例如有以下7个数的无序数列储存在数组arr[7]中,现在需要用冒泡排序法来对以下序列进行排序

冒泡排序是比较相邻的两个数,如果第一个数比第二个数大,这两个数就要交换两个数的位置,如果第一个数小于第二个数则不用变换位置,例如第一个数3比5小不用变换位置,接下来看5和2,5比2大所以5和2交换位置,然后5再与4比较,5比4大,两数交换位置,再接着5与1比较,5比1大两数交换位置,再接着5与8比较5小于8所以不用交换位置,再看8和7,8比7大两数交换位置。以上是冒泡排序的第一轮排序,我们找出了这个无序数列的最大值8,第一轮排序完成后的序列如下图:

接下来开始第二轮排序,从第一个数3开始与相邻数2比较,3和2比较,3大于2两数交换位置,以此类推第二轮交换完成后排好8除外的数列最大数7,结果如下图:

第三轮交换完的结果如下图:

第四轮交换完的结果如下图

由于这次举例的数列有些特殊所以四次就排好了序,但其实严格按照冒泡排序来说,我们这四轮排序只是排好了4 5 7 8这四个数字,要想完成排序还需进行两轮排序才行。所以要想用冒泡排序排好七个数,则需要排六轮,第一轮需要比较6次,由于每一轮会排好一个数,所以随着轮数的增加每轮的比较次数会递减,

1.2、冒泡排序的代码实现

先int一个数组存储七个数

冒泡排序,外层循环是排序的轮数,内层循环是每轮比较的次数,由于每轮的比较次数与轮数和需要排序的数字数的关系刚好是:比较次数=需要排序的数字数-轮数-1,所以内层循环循环次数即为7-i-1

排序完成后我们需要输出一下数列用一个循环即可输出数组中的数列

运行结果如图所示

二、选择排序

2.1、选择排序的原理讲解

选择排序有升序和降序两种排序方法,

升序排序的原理是:对于一个无序数列,我们先假定其中一个数为这个数列的最小值,然后让这个假定最小值和其他数依次比较,找到这个数列中真实的最小值,将真实最小值和假定最小值的位置互换,这时我们就完成了第一轮排序并排好了第一个数,

第二轮:接着在剩余的数中假定一个最小值,然后让这个假定最小值和其他数(除第一次已经排好的数)依次比较,找到这个数列中真实的最小值,将真实最小值和假定最小值的位置互换,我们就完成了第二轮排序,并排好了第二个数,以此类推直到排序完成

降序排序的原理是:对于一个无序数列,我们先假定其中一个数为这个数列的最大值,然后让这个假定最大值和其他数依次比较,找到这个数列中真实的最大值,将真实最大值和假定最大值的位置互换,这时我们就完成了第一轮排序并排好了第一个数,

第二轮:接着在剩余的数中假定一个最大值,然后让这个假定最大值和其他数(除第一次已经排好的数)依次比较,找到这个数列中真实的最大值,将真实最大值和假定最大值的位置互换,我们就完成了第二轮排序,并排好了第二个数,以此类推直到排序完成

2.2、选择排序的代码实现

我们先假定其中一个数为这个数列的最大值或最小值,记录下这个数在数组中的下标并将这个下标命名为MinOrMax,然后让这个假定的最大值或最小值与其他剩余的数比较,如果出现比这个假定的最小值还要小的数或比假定的最大值还要大的数就把这个数在数组中的下标的值赋值MinOrMax以此类推直到与剩余的数全部比较完成,这时假定的最小值或最大值的下标MinOrMax,就是这个数列真实的最小值或最大值的下标,然后我们将这这两个数的位置互换,就进行完了第一轮排序并排好了第一个数。

升序时:如图1我们先假定0号下标所代表的数3为最小值,此时MinOrMax=0,

图一

然后3和5比较,3小于5,往后走3和2比较3大于2,这时我们就把数字2的下标2赋值给MinOrMax,此时MinOrMax=2,如图二,

图二

继续往后比较2与4比较,2小于4,继续往后比较2和1比较,2大于1,所以将数字1的下标4赋给MinOrMax,此时MinOrMax=4如图三,

图三

继续比较1小于7,1小于8,所以第一轮比较完成,现在MinOrMax=4,所以将下标为4的数字和刚开始的下标为0的数交换位置,即3和1交换位置交换完成后如图四

图四

以此类推排序完成后面几轮排序,排序完的结果如图5。

图五

代码截图如图所示:

最后在main函数中调用这个函数,运行结果如下图。

如果在函数调用时填入除2以外的其他数字就可以用升序排序排序,结果如图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值