quicksort - Solidity 中的降序快速排序

标签 quicksort solidity

我找不到 Solidity 的降序快速排序,这是我基于此要点的代码,但按升序排列:https://gist.github.com/subhodi/b3b86cc13ad2636420963e692a4d896f

function quickSort(uint[] memory arr, int left, int right) internal pure {
    int i = left;
    int j = right;
    if (i == j) return;
    uint pivot = arr[uint(left + (right - left) / 2)];
    while (i <= j) {
        while (arr[uint(i)] < pivot) i++;
        while (pivot < arr[uint(j)]) j--;
        if (i <= j) {
            (arr[uint(i)], arr[uint(j)]) = (arr[uint(j)], arr[uint(i)]);
            i++;
            j--;
        }
    }
    if (left < j)
        quickSort(arr, left, j);
    if (i < right)
        quickSort(arr, i, right);
}

最佳答案

这比我想象的要容易。只需要更改与枢轴相关的比较:

function quickSort(uint[] memory arr, int left, int right) internal pure {
    int i = left;
    int j = right;
    if (i == j) return;
    uint pivot = arr[uint(left + (right - left) / 2)];
    while (i <= j) {
        while (arr[uint(i)] > pivot) i++;
        while (pivot > arr[uint(j)]) j--;
        if (i <= j) {
            (arr[uint(i)], arr[uint(j)]) = (arr[uint(j)], arr[uint(i)]);
            i++;
            j--;
        }
    }
    if (left < j)
        quickSort(arr, left, j);
    if (i < right)
        quickSort(arr, i, right);
}

关于quicksort - Solidity 中的降序快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64661313/

相关文章:

java - do while循环设计有设计问题

c - 通过队列实现快速排序?

constructor - ChainID Solidity 版本 0.6.12

python - eth-brownie - 没有名为 <Users.someuser> 的模块

javascript - 通过solidity向Aave提供ETH

ethereum - 如何计算 Uniswap V3 中添加流动性的存款金额

javascript - 从快速排序中删除递归

python - 为什么 QuickSort 的这种实现不起作用?

java - 为什么这种快速排序分区方法是错误的?

以太坊彩票智能合约满足以下条件