Chinaunix首页 | 论坛 | 博客
  • 博客访问: 294302
  • 博文数量: 70
  • 博客积分: 1990
  • 博客等级: 上尉
  • 技术积分: 686
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-02 08:52
文章分类

全部博文(70)

文章存档

2015年(2)

2014年(9)

2013年(2)

2012年(20)

2011年(1)

2010年(36)

分类: C/C++

2012-03-31 22:06:59

源码:

/*数组排序*/

#include

//#define MAX(a,b) ((a) > (b) ? (a) : (b)

 

#if 1

int arrange(int sa[], int num)

{

       int i,j,tmp;

       int stimes = 0;    //circle total times

       int ttimes = 0;        //really exchange times

      

       if(num < 1)

       {

              printf("Array error\n");

       }

      

       for(i = num-1; i >= 0; i--)

       {

 

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

              {

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

                     {

                            tmp = sa[j];

                            sa[j] = sa[j+1];

                            sa[j+1] = tmp;

                            ttimes++;

                     }

                     stimes++;

              }

             

              printf("tmp:%d\n",tmp);

       }

      

       printf("st:%d,tt:%d\n",stimes,ttimes);

       return 0;

}

#endif

 

int main()

{

       int sr[] = {1,8,2,9,-1};

       int p,numb;

      

       numb = sizeof(sr)/sizeof(sr[0]);

      

      

       arrange(sr, numb);

      

       for(p = 0; p < numb; p++)

              printf("%d\t",sr[p]);

      

       return 0;

}

 

运行效果:
 

编程小结:

冒泡法排序

 

2for循环,每一次内层for循环都可以确定本轮的最大值,放在本轮最后;外层for循环主要用来确定排序的范围。(由于每一次内循环都确定一个最大值且位于最后,外层for循环只需要将最后的最大值去除排序范围即可)

阅读(1011) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~