排序算法----简单冒泡排序

Posted recur young

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法----简单冒泡排序相关的知识,希望对你有一定的参考价值。

本文章是本人基于学习《啊哈算法》以及其他相关文章之后,根据自己的理解创作的文章,如果有不正确的地方还希望各位可以指点。


在日常生活中,我们总是需要将一些物品进行排序,比如:我们在站队的时候需要按由高到低的(或者由低到高)的顺序进行排队;每次经历考试之后我们总需要将成绩进行排序等等;在日常中我们可以将数据输入电脑就可以进行自动排序,那么在电脑中我们该如何撰写一个这样的程序实现这种功能呢?下面我们将介绍一种方法,它就----简单冒泡排序!!


话不多说,直接上正文 !

简单冒泡排序基本思想

假设现在有n个数需要进行降序排序,我们从第一个数开始,将第一个数与第二个数进行比较,如果第一个数小于第二个数,就将第一个数和第二个数的位置进行交换(否则不进行交换);随后将第二个数与第三个数进行比较,若第二个数小于第三个数,就将第二个数与第三个数进行交换(否则不换),依次类推,直到第n-1个数与第n个数进行上述比较之后,第一轮比较结束,此时最小的数已经到达第n个位置;随后从头开始,将第一个数与第二个数进行比较。。直到第n-2个数与第n-1个数进行比较交换,此轮结束,第二小的数据已经到达n-1的位置;依次类推,直到最后完成降序排序。也就是说将n个数据进行排序需要进行n-1次操作


具体案例

上面的讲解可能听完还不是很明白,下面我们通过具体案例来进行讲解:

假设现有一组数据12,15,20,23 现在我们需要将这组数据进行降序排序

第一轮:

(1)将12与15进行比较,发现12小于15,交换12与15的位置,此时排列为:

                         15   12   20   23

(2)将12与20进行比较,发现12小于20,交换12与20的位置,此时排列为:

                        15   20   12   23

(3)将12与23进行比较,发现12小于23,交换12与23的位置,此时的排列为:

                        15   20    23   12

第一轮结束,我们发现此时最小的数据12已经到达最后一个位置,随后开始新的一轮;

第二轮:

(1)将15与20进行比较,发现15小于20,交换15与20的位置,此时排列为:

                          20   15   23   12

(2)将15与23进行比较,发现15小于23,交换15与23的位置,此时排列为:

                         20    23    15    12

到这个时候,第二轮结束,最后两个数据不会进行比较,因为通过第一轮我们已经确定最小的数据放到了最后的位置,此一轮也将第二小的数据放在倒数第二个位置,随后开始新的一轮;

第三轮:

将20与23进行比较,发现20小于20,交换20与23的位置,此时排列为:

                     23    20    15   12

此时排序结束,我们想要降序排列一组数据已经达到目的。


注意:上述例子是属于升序排列变成降序排列,所以每一轮都有新的数据进行交换,在一些例子中可能会出现还没有完成n-1轮操作的时候就已经排好顺序,这个时候在计算机运行的时候仍然会继续下面没有完成的相关轮。是不是觉得这样的话一些排序完成后如果还要继续下去会更复杂,可以增加一个判断条件,在完成排序之后就停止,这样算法的时间复杂度更小,你们也可以自己思考思考哦,小编在下一篇文章中会对简单冒泡排序的优化版进行讲解哦!!  可以关注一下!排序算法(1)----简单冒泡排序


相信读到这里你已经对冒泡排序理解的差不多了,没错,使用嵌套循环就可以实现,不妨停下来自己思考一下代码实现再看下面的文章吧!(一定要想一想才可以哦,这样对自己才有帮助!!排序算法(1)----简单冒泡排序排序算法(1)----简单冒泡排序排序算法(1)----简单冒泡排序


实现代码


#include<stdio.h>
int main()
{
 printf("此代码实现的是降序排列!\n\n");
 int i,j,t;
 int m;
 int a[100];
 printf("请输入你想要在数组中加入多少数据:");
 scanf("%d",&t);                      //表示你将要在数组中输入多少个数据
 printf("输入防在数组中的数据:\n");
 for(int l=0;l<=t-1;l++)             //将数据存储至数组之中
 {
  scanf("%d",&a[l]);          
 }
 for(i=t-1;i>=0;i--)               //使用嵌套循环进行大小比较并进行数据交换
 {
  for(j=0;j<=i;j++)
  {
   if(a[j]<a[j+1])
   {
    m=a[j];
    a[j]=a[j+1];
    a[j+1]=m;
   }
  }
 }
 for(int n=0;n<=t-1;n++)           //输出结果
 {
  printf("%d  ",a[n]);
 }
 return 0;
 }



排序算法(1)----简单冒泡排序


当然代码实现方式也不止这一种,小编只是介绍自己编写的代码,你们也可以按照自己的来哦!


简单冒泡排序就介绍到这里了,小编第一次做类似文章的撰写,希望可以得到大家的支持哦!排序算法(1)----简单冒泡排序排序算法(1)----简单冒泡排序排序算法(1)----简单冒泡排序

大家一起加油学习吧!


以上是关于排序算法----简单冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

简单的排序算法(冒泡,选择排序,快排,插入排序)

算法冒泡排序(一个简单的排序)

简单排序算法:冒泡法排序(Java)

快速排序和冒泡排序

简单排序算法(冒泡排序插入排序选择排序)JS实现

排序算法——冒泡排序