<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 閱讀(208) 評論(0)  編輯  收藏 所屬分類: 算法
    主站蜘蛛池模板: 性一交一乱一视频免费看| 国产亚洲成av人片在线观看| 国产亚洲美女精品久久久久| 亚洲成a人在线看天堂无码| 国产又黄又爽又大的免费视频 | 亚洲av日韩av激情亚洲| 2021久久精品免费观看| 特级aa**毛片免费观看| 久久亚洲精品成人综合| 成年人在线免费看视频| 一级一片免费视频播放| 亚洲毛片无码专区亚洲乱| 免费国产a国产片高清| 午夜视频免费在线观看| 亚洲熟妇AV一区二区三区浪潮| 久久精品国产亚洲AV不卡| 99精品国产免费久久久久久下载| 全黄A免费一级毛片| 亚洲制服丝袜精品久久| 久久国产成人精品国产成人亚洲 | 在线看无码的免费网站| 亚洲精品乱码久久久久久V| 国产亚洲精品国产| 午夜男人一级毛片免费| 久久精品视频免费| 综合一区自拍亚洲综合图区| 亚洲黄色网址在线观看| 亚洲国产精品国产自在在线 | 亚洲AV蜜桃永久无码精品| 8x成人永久免费视频| 一区二区免费在线观看| 亚洲宅男精品一区在线观看| 亚洲无人区午夜福利码高清完整版| 国产在线国偷精品产拍免费| a级毛片无码免费真人久久| 精品久久久久久久久亚洲偷窥女厕| 亚洲高清无在码在线无弹窗| 国产亚洲精久久久久久无码| 免费在线不卡视频| 午夜成年女人毛片免费观看| 99在线免费观看视频|