如何解决降序快速排序
我找不到用于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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。