三种排序组合

        C 中到目前为止我所接触到的排序方式有三种 :冒泡,选择,插入

这三种排序都可以对一串数字进行由小到大的排列,

         冒泡:首先比较第一个数字和第二个数字的大小 , 如果第一个数字大于第二个数字便交换两个数字的位置,然后继续比较第二个数字和第三个数字的大小,同理,如果第二个数字大于第三个数字便交换二者的位置,反之则不改变位置,依次进行内推。

 如果有一个 序列

67    89    82    100    75

首先比较第一个数  67  和第二个数  89  的大小,因为  67  <  89  所以二者的位置不用交换

67    89    82    100    75

进而我们比教第二个数与第三个数的大小, 89    >    82  所以需要交换二者的位置

67    82    89    100    75

继续比较第三个数和第四个数的大小,89    <    100  所以不用交换一开始两个数字的位置

67    82    89    100    75

最后比较第第四个数字和第五个数字的大小,100    >    75  所以进行交换

67    82    89    75     100

不难发现经过序列排列后的的序列仍然没有规则的排序,所以我们需要进行循环,实际上,冒泡排列原序列中各个数字的位置不一定对,但是最后一位一定是最大的那个数字,实际上,每进行一次冒泡排列,我们都可以确定的是最大的那个数字,所以,如果一个序列有  n  个数我们需要用 

n  -  1  次来寻找第  2  个位置到第  n  个位置所应该进入的数字,而当我们排列好第  2  个数到第  n  个数后,只剩下最后一个数排掉第  1  个位置上,所以,n  个数所需要的冒泡排列使用的次数应该为  n  -  1  。

        

        选择: 在一个序列里面去找最小的值,然后将最小的值找出来,把他与第一个数交换位置,而后将第一个数也就是最小的那个数暂时移除原有的序列,然后找出其中第二个最小的值,并将最小的值与第二个值的位置进行交换,以此内推。所以,选择排列的实质实际上就是将一个序列的最小值一个个找出并依次赋值给第一个,第二个,第三个.......第 n 个。

  

例如

序列:

67    89    82    100    75

首先我们找到最小的数值:67 ,但是他本身就是第一个数字,所以我们并不需要做任何处理。

67    89    82    100    75

之后,我们在除去第一个数的序列里继续寻找最小的数,75  ,所以我们需要将他放在第二位上,但是因为第二位本身就有一个数,所以我们需要将第二位上的数改成  75  ,然后将  75  所对应位次上的数改成原本第二位上的数

67    75   82    100    89

同理,我们接着找最小的数,82,将其改成第三位上的数

67    75   82    100    89

接着找最小的数,89

67    75   82    89    100

可以发现,如果有 n 个数,那么排列的次数为  n  -  1

插入:插入排列实际上是从第二个数开始依次将每一个数插入到他所应该在的正确的位置上,

如;

67    89    82    100    75

首先对第二个数字进行排列  89  >  67  ,所以,89  不用移动

67    89    82    100    75

其次,我们对第三个数进行排列,因为  82  <  89  所以我们首先交换 二者的位置,然后因为          82  >  67  所以不用进行移动

67    82    89    100    75

同理,我们紧接着判断第四位数字,因为  100  >  89  所以一百的位置不用进行更改

67    82    89    100    75

最后我们对第五位数字进行判断,因为  67  <  75  <  82  所以将  75  插入到  67  和  82  中间

67    75   82    89    100

        以上,是三排列方式的原理和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值