Chinaunix首页 | 论坛 | 博客
  • 博客访问: 276332
  • 博文数量: 95
  • 博客积分: 618
  • 博客等级: 中士
  • 技术积分: 455
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-28 13:39
文章分类

全部博文(95)

文章存档

2015年(65)

2013年(1)

2012年(10)

2011年(19)

分类: C/C++

2011-12-07 13:25:14

  1. /*
  2. *冒泡排序
  3. *依次比较相邻的两个数,将小数放在前面,大数放在后面
  4. *直至完成排序
  5. */

  6. int sort(int *istr,int len)
  7. {
  8.     int tmp;
  9.     for (int i = 0;i<len;i++)
  10.     {
  11.         for(int j = len-1;j>i;j--)
  12.         {
  13.             if(istr[j]<istr[j-1]) //比较,交换
  14.             {
  15.             tmp=istr[j];
  16.             istr[j]=istr[j-1];
  17.             istr[j-1]=tmp;
  18.             }
  19.         }
  20.     }

  21.     return 0;
  22. }

  23. /*
  24. *快速排序,递归
  25. *该方法的基本思想是:
  26. *先从数列中取出一个数作为基准数。
  27. *分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
  28. *再对左右区间重复第二步,直到各区间只有一个数。
  29. */

  30. void quiksort(int *arry,int low,int high)
  31. {
  32.     if (low>=high)
  33.     {
  34.         return;
  35.     }
  36.     int l=low,r=high;
  37.     int tmp=arry[low]; //取基数
  38.     while (l<r)
  39.     {
  40.         while (r>l&&arry[r]>tmp) //从右向左比较,查找右边有没有比基数小的数,如果没有,直到r=l终止循环
  41.         {
  42.             r--;
  43.         }
  44.         if (l<r) //交换位置
  45.         {    
  46.             arry[l++]=arry[r];
  47.         }
  48.         while (l<r&&arry[l]<tmp)
  49.         {
  50.             l++;
  51.         }
  52.         if (l<r)
  53.         {
  54.             arry[r--]=arry[l];
  55.         }
  56.     }
  57.     arry[l]=tmp; //将基数放回去
  58.     quiksort(arry,low,l-1);
  59.     quiksort(arry,r+1,high);
  60.     return ;
  61. }
阅读(1613) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

7大爷2011-12-09 00:46:27

经典的算法啊!