Dev@Free

          zJun's Tech Weblog

          [排序] 插入排序

          插入排序,好比是洗撲克一樣,我們將牌分作兩堆,每次從后面一堆的牌抽出最前端的牌,然后插入前面一堆牌的適當位置,例如:

          排序前: [92], 77, 67, 8, 6, 84, 55, 85, 43, 67? -- 將數組分為兩部分,第一個元素為一組

          第 1 次排序:[77 92] 67 8 6 84 55 85 43 67???? -- 將后一組的第一個元素 77 插入前一組的適當位置
          第 2 次排序:[67 77 92] 8 6 84 55 85 43 67???? -- 將后一組的第一個元素 67 插入前一組的適當位置
          第 3 次排序:[8 67 77 92] 6 84 55 85 43 67???? -- 將后一組的第一個元素?8 插入前一組的適當位置?
          第 4 次排序:[6 8 67 77 92 84] 55 85 43 67????? -- 將后一組的第一個元素?6 插入前一組的適當位置
          第 5 次排序:[6 8 67 77 84 92 55] 85 43 67????? -- 將后一組的第一個元素?84 插入前一組的適當位置
          第 6 次排序:[6 8 55 67 77 84 92 85] 43 67????? -- 將后一組的第一個元素?55 插入前一組的適當位置
          第 7 次排序:[6 8 55 67 77 84 85 92 43] 67????? -- 將后一組的第一個元素?85 插入前一組的適當位置
          第 8 次排序:[6 8 43 55 67 77 84 85 92] 67????? -- 將后一組的第一個元素?43 插入前一組的適當位置
          第 9 次排序:[6 8 43 55 67 67 77 84 85 92]????? -- 將后一組的第一個元素?67 插入前一組的適當位置

          Java代碼實現,如下:

          /** ?
          ??*?插入排序
          ??*??
          @param ??data:等代排序整型數組
          ??*?????data?=?{?92,?77,?67,?8,?6,?84,?55,?85,?43,?67?}
          ??*?????排序結果:
          ??*????????第?1?次排序:77?92?67?8?6?84?55?85?43?67?
          ??*????????第?2?次排序:67?77?92?8?6?84?55?85?43?67?
          ??*????????第?3?次排序:8?67?77?92?6?84?55?85?43?67?
          ??*????????第?4?次排序:6?8?67?77?92?84?55?85?43?67?
          ??*????????第?5?次排序:6?8?67?77?84?92?55?85?43?67?
          ??*????????第?6?次排序:6?8?55?67?77?84?92?85?43?67?
          ??*????????第?7?次排序:6?8?55?67?77?84?85?92?43?67?
          ??*????????第?8?次排序:6?8?43?55?67?77?84?85?92?67?
          ??*????????第?9?次排序:6?8?43?55?67?67?77?84?85?92?
          ???
          */
          ?
          public ? void ?insertSort( int ?data[])? {
          ????????
          int ?k,?temp,?max? = ?data.length;

          ????????
          for ?( int ?i? = ? 1 ;?i? < ?max;?i ++ )? {
          ????????????temp?
          = ?data[i];? // ?后一組的第一個元素
          ????????????k? = ?i? - ? 1 ;? // ?從前一組的最后一個元素開始比較
          ???????????? while ?(temp? < ?data[k])? {
          ????????????????data[k?
          + ? 1 ]? = ?data[k];? // ?如果前一組元素大于后一組第一個元素,則后移
          ????????????????k -- ;
          ????????????????
          if ?(k? == ? - 1 )
          ????????????????????
          break ;? // ?如果前一組元素比較完,則跳出
          ????????????}

          ????????????data[k?
          + ? 1 ]? = ?temp;? // ?插入適當的位置

          ????????????System.out.print(
          " ?第?? " ? + ?i? + ? " ??次排序:? " );
          ????????????
          for ?( int ?j? = ? 0 ;?j? <= ?max? - ? 1 ;?j ++ )? {
          ????????????????System.out.print(data[j]?
          + ? " ??? " );
          ????????????}

          ????????????System.out.println();
          ????????}

          ????}

          posted on 2006-07-10 14:32 zJun's帛羅閣 閱讀(507) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2006年7月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          統計

          常用鏈接

          留言簿(15)

          隨筆分類

          隨筆檔案

          相冊

          收藏夾

          博客

          文檔

          站點

          論壇

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 竹山县| 教育| 邛崃市| 太仆寺旗| 三原县| 静宁县| 报价| 临江市| 无锡市| 汤阴县| 任丘市| 昆明市| 奉化市| 满洲里市| 辽阳市| 手游| 正安县| 博客| 乳山市| 宝兴县| 丹东市| 栖霞市| 南木林县| 鄂托克前旗| 新和县| 屏东市| 阜南县| 湘阴县| 夹江县| 昭觉县| 静海县| 乌恰县| 永靖县| 湄潭县| 贵港市| 连城县| 滦南县| 江口县| 繁昌县| 准格尔旗| 建水县|