排序算法实现--冒泡排序和快速排序

1353阅读 0评论2011-12-09 7大爷
分类:

  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. }
上一篇:没有了
下一篇:bochs2.11下编译linux0.11