冒泡原理以及c实现

主要讲下冒泡、选择、插入排序的原理以及c的代码实现(其实我是不想写的,因为大夫放学不走)

首先说下这个冒泡排序,这个冒泡分为两种,单冒泡和双冒泡并行排序(其实这个双冒泡我也是今天才知道这个老师一天就讲一些有的没的,我都跟不上),废话不多说,开始吧(你要是觉得我废话多那就不要看,反正我写的我也不会看,错了我也不改)。

1.单冒泡排序

单冒泡,这个图是从上到下,实现的是从小到大的排序的功能,就是小的数字往上走,大的数字往下走。首先是62跟34比,34小,所以就交换次序,然后是62和84比,62比84小,顺序就不用交换,接下来是84和88比,同样84小,所以就不用交换,接下来是88和77比,77比88小,所以就要交换了,然后是88和21比,21小,所以两个数字的位置交换,以这样的方式进行到底,最后就可以把最大的数字挑出来,而且最大的数字是在最底下。这一轮完了就进行下一轮,以同样的方式进行,从第一个数字开始,与上一轮比较的方式相同,但是比较到倒数第二个数字就可硬停止这一轮的比较了,因为上一轮已经将最大的数字跳出来放在最下面了。这一轮直接比较到倒数第二位就可以了。以同样的方式依次轮回,后面的每一次比较的次数都比上一轮少一次。原理就是这些,接下来就是上代码了。(其实排序程序很简单,但是我这个班的老师进度快,喜欢那种各种穿插的讲)

上代码

#include<stdio.h>
#include<iostream>
void BolleSort(int *a, int n)
{
 int tmp = 0;
 for (int i = 0; i < n - 1; i++)
 {
 
  for (int j = 0; j < n - 1 - i; j++)
  {
   if (a[j] > a[j+1])
   {
    tmp = a[j];
    a[j] = a[j+1];
    a[j+1] = tmp;
   }
  }
 }
}
void ArrayPrint(int *a, int n)
{
 for (int i = 0; i < n; i++)
 {
  printf("%d\n", a[i]);
 }
}
int main()
{
 int arr[10] = {62,34,84,88,77,21,99,69,100,35};
 BolleSort(arr,10);
 ArrayPrint(arr,10);
 system("Pause");
 return 0;
}

接下来就是双冒泡并行排序,有单就有双,(这个我本来也不想写,但是我不会,所以要学习要写)

 

双冒泡排序是这样子的,首先62和34比,34小,所以就和62的位置交换,然后是62和84比,84和88比,然后是88和77比,77小,所以77和88的位置交换,以此类推,就和单冒泡的方法是一样的,这样进行到底,就找到了最大的数,即为100放在了最下面。然后第一轮比较完了,接下来就是双冒泡的不同之处了,第二轮从35开始,35与99比较,35小,所以35和99就交换位置了,以此类推,这一轮就可以把最小的数找到,并且放在了第一位,如此往复,这样的好处是比较的次数少了。

接下来就是上代码了

#include<stdio.h>
#include<iostream>
void Double_BolleSort(int *br, int n)
{
 int tmp = 0;
 for (int i = 0; i < (n - 1) / 2; i++)
 {
  for (int j = 0; j < (n - 1) / 2 - i; j++)
  {
   if (br[j] > br[j + 1])
   {
    tmp = br[j];
    br[j] = br[j + 1];
    br[j + 1] = tmp;
   }
  }
  for (int j = n - 1- i; j > i; j--)
  {
   if (br[j] < br[j - 1])
   {
    tmp = br[j-1];
    br[j - 1] = br[j];
    br[j] = tmp;
   }
  }
 }
}
void ArrayPrint(int *br, int n)
{
 for (int i = 0; i < n; i++)
 {
  printf("%d\n", br[i]);
 }
}
int main()
{
 int arr[10] = { 62,34,84,88,77,21,99,69,100,35 };
 Double_BolleSort(arr,10);
 ArrayPrint(arr,10);
 system("pause");
 return 0;
}

 好了,我要放学了,大夫累了,今天的博客就写到这里。代码我写的,vs2017,下次再写插入和选择排序。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值