<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人在线播放 | 亚洲AV无码精品色午夜在线观看| 四虎1515hm免费国产| 成年轻人网站色免费看| 国产精品视频免费观看| 日韩在线永久免费播放| 最近免费mv在线观看动漫| 一级免费黄色大片| 羞羞漫画小舞被黄漫免费| 中文字幕乱码亚洲无线三区| 亚洲成av人片不卡无码| 久久精品国产亚洲av麻豆小说| 国产亚洲综合久久系列| 国产亚洲精品国看不卡| 国产黄色一级毛片亚洲黄片大全| 日韩免费观看一级毛片看看| 最近的中文字幕大全免费版| 亚洲精品动漫免费二区| 99精品国产免费久久久久久下载| 男女免费观看在线爽爽爽视频 | 亚洲日韩涩涩成人午夜私人影院| 四虎永久在线精品免费观看地址 | 青青视频免费在线| 老司机精品视频免费| mm1313亚洲国产精品无码试看| 亚洲精品伦理熟女国产一区二区 | 国产成人无码免费视频97| 国产高清视频在线免费观看| 永久中文字幕免费视频网站| 国产视频精品免费| 免费**毛片在线播放直播| 亚洲成片观看四虎永久| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 黄色网址在线免费观看| 一级做a爱过程免费视| 韩国免费A级毛片久久| 色播在线永久免费视频网站| 久久免费视频精品|