快排思想:
通过一趟排序将要排序的东东分成独立的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实现快速排序
最新推荐文章于 2021-05-18 19:07:49 发布