码迷,mamicode.com
首页 > 其他好文 > 详细

冒泡法--分析

时间:2015-07-08 22:24:27      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

冒泡法的基本原理:

          1.给定n个数,从第一数字开始依次对相邻的两个数进行比较,当前面的数字大于后面的数字时,就交换位置。

        2.经过一轮比较后,最大的数字将位于数组的最右边,即第n位。

        3.然后对n-1位数字进行第二轮比较,直到剩下一个数字为止。

 

 分析:

      1.从看到n个数,就知道这是需要用到for循环的。

    2.接下来就要需要思考,需要几个for循环呢?一般如果一个数字与其他数字进行比较的话,就是单个for循环,需要这种两两比较的话,就需要比较N趟,每趟N次,所以需要两个for循环。

    3.好,确定了是两个for循环了。在这种嵌套循环中,关键是确定边界值,也就是两for循环的界限。

       for(i=0;i<n;++i)

               for(j=0;j<   ;j++)

    空出的是第二个循环的边界,那怎么确定呢?就看我们比较了,我们在第一趟比较完成后,就确定了一个最大数,那第二趟只需要比较N-1个数就可以了,第三趟只需要比较N-2个数。

    这样的话,就可以确定出嵌套循环中的边界是n-i了。

    所以for循环为

        for(i=0;i<n;++i)

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

    4.再循环中做什么呢?两两数字进行比较。若前一个数大于后一个数,则交换两者,即if(a[j]>a[j+1]) {swap(a[j],a[j+1])};

 

完整实例:

#include<stdio.h>

void Swape(int& a,int& b) //注意使用数组跟指针一样,需要地址符,不然实参没有传递

{  int temp;

   temp =a;

   a=b;  

  b=temp; }

void BubbleSort(int* a,int n)

{  

  for(int i=0;i<n;i++)

      for(int j=0;j<n-i-1;j++)//注意这个边界,应该是n-i-1,因为下面是a[j+1]。不然会超出边界。   

      {    

        if(a[j]>a[j+1])  

            {     Swape(a[j],a[j+1]);    }   

                }

}

int main()

{  int a[]={3,4,6,2,7,1};  

  int len = sizeof(a)/sizeof(a[0]);  

  BubbleSort(a,len);  

  for(int i=0;i<len;++i)

   {   printf("%d",a[i]);  }

     return 0;

}

冒泡法--分析

标签:

原文地址:http://www.cnblogs.com/kaining/p/4631346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!