<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 100  文章 - 50  trackbacks - 0
    <2013年4月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    收藏夾

    我收藏的一些文章!

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

     說來感到慚愧,昨天看別人的博客上面一一講了一些算法,其實這些算法在大學都學過,不過幾乎全部忘記了。雖然現在做java上層開發基本上用不到算法,但是還是感覺算法是一種思想,是一種靈魂,所以又不僅翻開了嚴蔚敏老師的數據結構,一個一個把以前忘記的算法實現一遍。


             快速排序的基本思想

             通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分關鍵字小,則分別對這兩部分繼續進行排序,直到整個序列有序。

           先看一下這幅圖:


    把整個序列看做一個數組,把第零個位置看做中軸,和最后一個比,如果比它小交換,比它大不做任何處理;交換了以后再和小的那端比,比它小不交換,比他大交換。這樣循環往復,一趟排序完成,左邊就是比中軸小的,右邊就是比中軸大的,然后再用分治法,分別對這兩個獨立的數組進行排序。

        

    1. public int getMiddle(Integer[] list, int low, int high) {  
    2.         int tmp = list[low];    //數組的第一個作為中軸  
    3.         while (low < high) {  
    4.             while (low < high && list[high] > tmp) {  
    5.                 high--;  
    6.             }  
    7.             list[low] = list[high];   //比中軸小的記錄移到低端  
    8.             while (low < high && list[low] < tmp) {  
    9.                 low++;  
    10.             }  
    11.             list[high] = list[low];   //比中軸大的記錄移到高端  
    12.         }  
    13.         list[low] = tmp;              //中軸記錄到尾  
    14.         return low;                   //返回中軸的位置  
    15.     }  

           遞歸形式的分治排序算法:

     

          

    1. public void _quickSort(Integer[] list, int low, int high) {  
    2.         if (low < high) {  
    3.             int middle = getMiddle(list, low, high);  //將list數組進行一分為二  
    4.             _quickSort(list, low, middle - 1);        //對低字表進行遞歸排序  
    5.             _quickSort(list, middle + 1, high);       //對高字表進行遞歸排序  
    6.         }  
    7.     }  

      
    1. public void quick(Integer[] str) {  
    2.         if (str.length > 0) {    //查看數組是否為空  
    3.             _quickSort(str, 0, str.length - 1);  
    4.         }  
    5.     }  

       編寫測試方法:

     

     

    1. public class TestMain {  
    2.   
    3.     /**  
    4.      * @param args  
    5.      */  
    6.     public static void main(String[] args) {  
    7.         // TODO Auto-generated method stub  
    8.          Integer[] list={34,3,53,2,23,7,14,10};  
    9.          QuicSort qs=new QuicSort();  
    10.          qs.quick(list);  
    11.          for(int i=0;i<list.length;i++){  
    12.              System.out.print(list[i]+" ");  
    13.          }  
    14.          System.out.println();  
    15.     }  
    16.   
    17. }  
         看一下打印結果吧:

     

         2 3 7 10 14 23 34 53
       

         這樣就排序好了,快速排序是對冒泡排序的一種改進,平均時間復雜度是O(nlogn)。

    posted on 2013-04-11 00:30 fly 閱讀(209) 評論(0)  編輯  收藏 所屬分類: 算法
    主站蜘蛛池模板: 免费人成网站在线高清| 亚洲va国产va天堂va久久| 一级做a爰黑人又硬又粗免费看51社区国产精品视| 大胆亚洲人体视频| 99久久国产免费中文无字幕| 亚洲精品永久在线观看| 亚洲黄黄黄网站在线观看| 真实国产乱子伦精品免费| 国产偷国产偷亚洲清高APP| 亚洲激情中文字幕| 国产在线观看免费完整版中文版| 精品久久久久成人码免费动漫| 亚洲一区精品伊人久久伊人| 久久99热精品免费观看动漫| 久久久久久久久无码精品亚洲日韩| 8090在线观看免费观看| 朝桐光亚洲专区在线中文字幕| 巨胸喷奶水视频www网免费| 99久久免费国产精精品| 亚洲日本成本人观看| 国产精品亚洲玖玖玖在线观看 | 免费观看的a级毛片的网站| 性生大片视频免费观看一级| 亚洲精品国产专区91在线| 亚洲真人日本在线| 好男人视频在线观看免费看片| 亚洲精品无码永久在线观看男男| 日韩精品无码区免费专区| 99久久免费国产特黄| 亚洲国产欧洲综合997久久| 久久亚洲春色中文字幕久久久| 国产一卡二卡四卡免费| 国产一区二区三区免费观在线| 国产AV无码专区亚洲AV漫画| 99精品全国免费观看视频| 最新国产乱人伦偷精品免费网站| 亚洲AV无码一区东京热| 国产伦一区二区三区免费| 美女视频黄的全免费视频网站| 在线综合亚洲欧洲综合网站| 青青草国产免费久久久下载 |