排序问题(不断总结,不断更新)

本文详细介绍了两种经典的排序算法——冒泡排序和选择排序。通过具体的实例演示了这两种算法的工作原理,包括如何通过比较和交换操作来实现数组的排序,并提供了对应的伪代码帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                  排序问题

  冒泡排序:

冒泡排序的思想:每次将相邻的两个数比较,将小的放到前面(或大的放到前面)。若有6个数,985420。第一次,98比较,将9,8对调;第二次,将第二个数与第三个数比较即9,5比较,将9,5对调;第三次,将9,4比较······(如下图所示)

排序问题(不断总结,不断更新)

所以循环只需要控制循环几次,和每一次循环交换的次数就行了。

循环的次数是n-1次,然后每次循环的次数就是n-i,然后排列就行。

冒泡的思路就是:起泡或者说是沉底的思想。沉底就是每一次循环都将最大或者最小的数放到最下面,不断循环,直到结束。

 

代码:

for(i n-1; ++)

for(j 0;j n-i;j++)

{

if(a[j]>a[j+1])              //将最大的数字沉底,按照从小到大的顺序排列。                 

swap(a[j],a[j+1]);

}

 

 

 

 

选择排序

 

选择排序的思想:所谓选择法就是将n个数中的最小数与a[0]对换;再将a[1]~a[n]中的,最小数与a[1]对换,依次往下循环,……每比较一轮,找出未经排序的最小的一个数。共比较N-1轮。

 5个数为例,说明一下:

a[0]   a[1]   a[2]   a[3]    a[4]

                        未排序时的情况

                        将余下的4个数中最小的数3a[1]交换

                        将余下的3个数中最小的数4a[2]交换

                        将余下的2个数中的最小数6a[3]交换

                        至此完成排序


 

 

void sort(int array[],int n)

{

     int i,j,k;

     for(i 0;i n-1; ++)             //比较n-1次

     {

           i;

           for(j i+1; n; ++)          //从第i+1个数字开始往下比较

          {

                  if(array[j]<array[j+1])

                  k=j;

                 swap(a[k],a[i]);

          }

     }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值