as3實現快速排序

快排思想:
              通過一趟排序將要排序的東東分成獨立的2部分,
              這樣的結果是一部分的數據比另外一部分的所以數據都要小,
              接着對這兩部分數據分別進行快速排序(這個過程有很多種方法,我這裏用的是遞歸),
              之後要排序的東東就排好了。
    代碼實現:
    package
    {
            import flash.display.Sprite;
           
            public class Main extends Sprite
            {
    //                var arr:Array = [5,1,4,3,10,0,46];
                    var arr:Array = [49,38, 65, 97, 76, 13, 27 ];
                   
                    public function Main()
                    {
                            getArr();
                            var timeStart:Number = (new Date()).getTime();
                            trace("排序前:"+arr);
                           
    //                                                bubbleSort();//3766ms
                            quickSort(0,arr.length-1);//31ms
                           
                            trace("排序後:"+arr);
                            var timeEnd:Number = (new Date()).getTime();
                            trace('排序用時:'+(timeEnd-timeStart));
                           
                           
                    }
                   
                    private function getArr():void{
                            for(var i:int=0;i<5000;i++){
                                    arr[i] = int(Math.random()*100);
                            }
                    }
                   
                    private function bubbleSort():void{
                            for(var i:int=0;i<arr.length-1;i++){
                                    for(var j:int=arr.length-1;j>i;j--){
                                            if(arr[j]<arr[j-1]){
                                                    var temp:int = arr[j-1];
                                                    arr[j-1] = arr[j];
                                                    arr[j] = temp;
                                            }
                                    }
                            }
                    }
                   
                   
                    private function quickSort(start:int,end:int):void{
                           
                            if(start<0||end>arr.length){
                                    trace('參數不合法');
                                    return;
                            }
                           
                            if(start<end){
                                   
                                    var i:int = start;
                                    var j:int = end;
                                    var base:int = arr[start];
                                    while(i<j){
                                           
                                            while(i<j&&arr[j]>=base) j--;
                                           
                                            if(i<j) {
                                                    arr[i] = arr[j];
                                                    i++;
                                            }
                                           
                                            while(i<j&&arr[i]<=base) i++;
                                           
                                            if(i<j){
                                                    arr[j] = arr[i];
                                                    j--;
                                            }
                                           
                                    }
                                    arr[i] = base;
                                   
                                    quickSort(start,i-1);
                                    quickSort(i+1,end);
                                   
                            }
                    }
            }
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章