快排思想:
通過一趟排序將要排序的東東分成獨立的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);
}
}
}
}
as3實現快速排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.