快速排序 

pragma solidity ^0.4.0;

contract Sorter {
    event finish(uint size, uint signature);
    
    function sort(uint size, uint signature) {

        // 初始化要排序的数组
        uint[] memory data = new uint[](size);
        for (uint x = 0; x < data.length; x++) {
            data[x] = size-x;
        }
        
        // 快排
        quickSort(data, 0, data.length - 1);
        finish(size, signature);
    }
    
    // 快排算法
    function quickSort(uint[] arr, uint left, uint right) internal {
        uint i = left;
        uint j = right;
        if (i == j) return;
        uint pivot = arr[left + (right - left) / 2];
        while (i <= j) {
            while (arr[i] < pivot) i++;
            while (pivot < arr[j]) j--;
            if (i <= j) {
                (arr[i], arr[j]) = (arr[j], arr[i]);
                i++;
                j--;
            }
        }
        if (left < j)
            quickSort(arr, left, j);
        if (i < right)
            quickSort(arr, i, right);
    }
}