H5C3J 学习笔记 part3 Quick Sort

我在复习快速排序算法时,就在想能不能把例子实现得动态一点,不要总是用document,write来write去了,也不要总是用xxx.innerHTML当输出了,我想把它实现得动态一点,然后我就开始找在javascript里面能操纵对象的缓动库,结果就找到了这个货。

[lib.ivank.net](http://lib.ivank.net/)
首先可以肯定这一定是一群ActionScript开发者,利用H5的特性(以Canvas为中心),完整地按照Adobe的标准实现了一遍ActionScript3相同的API,我就说一定会有人做这件事嘛~
之前看到写Canvas的部分的描述,讲到这个组件目前一旦绘制上东西,就失去了自己的标识,好像墨水泼洒到画布上,这样对做应用开发,尤其是游戏,是很难满足需求的。
ivank实现了显示列表,各种绘图,鼠标事件,乃至Box2D,3D模型渲染,真是可喜可贺啊~
然后我就把我的例子改成可以动的了。
[![](http://tiger-a-s-s.tobybai.cn/%2525E5%2525B1%25258F%2525E5%2525B9%252595%2525E5%2525BF%2525AB%2525E7%252585%2525A7%2525202013-09-28%252520%2525E4%2525B8%25258B%2525E5%25258D%2525889.00.52.png)](http://tiger-a-s-s.tobybai.cn/%2525E5%2525B1%25258F%2525E5%2525B9%252595%2525E5%2525BF%2525AB%2525E7%252585%2525A7%2525202013-09-28%252520%2525E4%2525B8%25258B%2525E5%25258D%2525889.00.52.png)
[Demo](http://hector.ziki.me/quicksort/QuickSort.html) 在此先记录快速排序的核心代码:
 function adjustArray(arr, l, r) {  
   var i = l;  
   var j = r;  
   var x = arr[l];  
   while (i < j) {  
     while (i < j && arr[j] >= x) {  
       j--;  
     }  
     if (i < j) {  
       arr[i] = arr[j];  
       i++;  
     }  
     while (i < j && arr[i] < x) {  
       i++;  
     }  
     if (i < j) {  
       arr[j] = arr[i];  
       j--;  
     }  
   }  
   arr[i] = x;  
   return i;  
 }  
 function quickSort(arr, l, r) {  
   if (l < r) {  
     var i = adjustArray(arr, l, r);  
     quickSort(arr, l, i - 1);  
     quickSort(arr, i + 1, r);  
   }  
 }