quickSort を 改善!?
ttp://hoppersource.dip.jp/wordpress/?p=46
constructor 部分でちょっと使いやすくしただけ。
package{ public class QuiqSort{ private var target:Array; private var sorttarget:Array; private var dataLimit:Number; private var sortArrayIndex:Array = new Array(); public function QuiqSort(dataNum:uint ,limit:Number = 300){ dataLimit = limit; target = new Array(dataNum); target.forEach(targetSet); sorttarget = target.concat(); quickSort(0 ,dataNum - 1 ,sorttarget); } public function getSortArray():Array{ return sorttarget; } public function getRandomArray():Array{ return target; } public function getSortArrayIndex():Array{ return sortArrayIndex; } private function targetSet(element:* ,index:int ,arr:Array):void{ target[index] = Math.floor(Math.random() * dataLimit); sortArrayIndex[index] = index; } private function quickSort(bottom:Number ,top:Number ,data:Array):void{ var upper:Number = top; var lower:Number = bottom; if(top <= bottom){ return; } var div:Number = data[bottom]; var temp:Number; while(lower < upper){ while(lower <= upper && data[lower] <= div){ lower += 1; } while(lower <= upper && div < data[upper]){ upper -= 1; } if(lower < upper){ temp = data[lower]; data[lower] = data[upper]; data[upper] = temp; for(var i:Number = 0;i < sortArrayIndex.length;i++){ if(sortArrayIndex[i] == lower){ sortArrayIndex[i] = upper; } else if(sortArrayIndex[i] == upper){ sortArrayIndex[i] = lower; } } } } temp = data[bottom]; data[bottom] = data[upper]; data[upper] = temp; for(i = 0;i < sortArrayIndex.length;i++){ if(sortArrayIndex[i] == bottom){ sortArrayIndex[i] = upper; } else if(sortArrayIndex[i] == upper){ sortArrayIndex[i] = bottom; } } quickSort(bottom ,upper - 1 ,data); quickSort(upper + 1 ,top ,data); } } }
mimic28号でした。