學海拾遺

          生活、技術、思想無處不在學習
          posts - 52, comments - 23, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          添加一個二路冒泡算法

          Posted on 2009-02-21 14:16 tanzek 閱讀(577) 評論(0)  編輯  收藏 所屬分類: 技術學習

          看Robert Sedgewick的《algorithms in c》一書時,在講到冒泡算法的時候在練習中提到了“搖擺排序”(中文版書中的P206面的第30題),然而細細理解出來就是指的二路冒泡,其實在Donald E.Knuth的《計算機程序設計藝術 第三卷 排序與查找》里面也有講過,名字記得不是很清楚了。
          暫時來講我自己實現了一個,里面的性能分析和調優留在以后再做,先把它放在這里和大家一起共享一下,歡迎指正。

          /*
          *?by?tanzek.?2009-02-21 .?
          * implement in dev cpp.
          */

          #include?
          < stdio.h >
          #include?
          < stdlib.h >

          #define ?n?10

          void ?print( int ? * a,? int ?m,? int ?l,? int ?r)
          {
          ????
          for ( int ?i = 0 ;?i < m;?i ++ )
          ????{
          ????????printf(
          " %d? " ,?a[i]);????????
          ????}?????
          ????printf(
          " --->l=%d,?r=%d\n " ,?l,?r);
          }

          int ?count? = ? 0 ;

          int ?main()
          {
          ????
          int ?a[ 10 ]? = ?{ 104 , 21 , 33 , 4 , 8 , 102 , 7 , 89 , 91 , 11 };
          ????
          int ?l,?r;
          ????l?
          = ? - 1 ;?r? = ?n;
          ????
          int ?t? = ? 1 ;
          ????
          int ?temp;
          ????
          int ?j;
          ????
          while (t? > ? 0 )
          ????{
          ????????count?
          ++ ;
          ????????printf(
          " 第%d趟\n " ,?count);
          ?????????
          ????????t?
          = ? - 1 ;
          ????????
          for (j = r - 1 ;?j > l + 1 ;?j -- )
          ????????{
          ????????????
          if (a[j]? < ?a[j - 1 ])
          ????????????{
          ????????????????temp
          = a[j];?a[j] = a[j - 1 ];?a[j - 1 ] = temp;
          ????????????????t?
          = ?j? - ? 1 ;
          ????????????}
          ????????}
          ????????l?
          = ?j;
          ????????
          for (j = l + 1 ;?j < r - 1 ;?j ++ )
          ????????{
          ????????????
          if (a[j]? > ?a[j + 1 ])
          ????????????{
          ????????????????temp
          = a[j];?a[j] = a[j + 1 ];?a[j + 1 ] = temp;
          ????????????????t?
          = ?j + 1 ;
          ????????????}
          ????????}
          ????????r?
          = ?j;
          ????????print(a,?n,?l,?r);
          ????}
          ????
          ????printf(
          " \ncount?=?%d\n " ,?count);
          ????system(
          " PAUSE " );
          ????
          return ? 0 ;
          }

          同時,通過GOOGLE搜索,也搜到一篇二路冒泡算法實現的文章,也放在這里供大家一起參考。
          武林外傳 http://qzone.qq.com/blog/53631006-1210520905
          主站蜘蛛池模板: 湛江市| 北票市| 土默特右旗| 泽普县| 建昌县| 黄梅县| 富锦市| 平阳县| 安康市| 朝阳区| 龙川县| 韶关市| 襄樊市| 德清县| 通山县| 扶沟县| 江陵县| 临猗县| 柯坪县| 绥江县| 商丘市| 鄄城县| 桃园县| 衡山县| 柳林县| 望城县| 北辰区| 布拖县| 仁化县| 德钦县| 莱西市| 博白县| 金坛市| 翁源县| 甘洛县| 江安县| 德阳市| 开平市| 广饶县| 蛟河市| 永安市|