最近闲来 总结一下as3 版本的一些算法:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
测试一个10000个元素的数组,快速排序所用时间52ms,希尔排序所用时间92ms
private function quicksort (a :Array, lo :int, hi :int) :void
{
var i :int = lo;
var j :int = hi;
while(i<j)
{
while(i<j&&a[i]<=a[j])//以数组start下标的数据为key,右侧扫描
{
j--;
}
if(i<j)//右侧扫描,找出第一个比key小的,交换位置
{
swap(a,i,j);
}
while(i<j&&a[i]<a[j])//左侧扫描(此时a[j]中存储着key值)
{
i++;
}
if(i<j)//找出第一个比key大的,交换位置
{
swap(a,i,j);
}
}
if(i-lo>1)
{
//递归调用,把key前面的完成排序
quicksort(a,lo,i-1);
}
if(hi-i>1)
{
quicksort(a,i+1,hi);//递归调用,把key后面的完成排序
}
}
private function swap(a :Array,i :int,j:int):void
{
var temp :int;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}