参考链接 https://blog.csdn.net/been123456789jimmy/article/details
1、题目描述:
2、启发:
如何用一个数表示两个数据 我们要想到取模和求余运算
力扣148:排序链表:如何用o(1)的空间复杂度实现归并排序
题目链接:https://leetcode.cn/problems/sort-list/description/?favorite=2ckc81c
3、核心代码
static void merge(int[] arr, int left, int mid, int right, int maxval) {
int i = left;
int j = mid + 1;
int k = left;
while (i <= mid && j <= right) {
if (arr[i] % maxval <= arr[j] % maxval)
{
arr[k] = arr[k] + (arr[i] % maxval) * maxval;
k++;
i++;
}
else
{
arr[k] = arr[k] + (arr[j] % maxval) * maxval;
k++;
j++;
}
}
while (i <= mid) {
arr[k] = arr[k] + (arr[i] % maxval) * maxval;
k++;
i++;
}
while (j <= right) {
arr[k] = arr[k] + (arr[j] % maxval) * maxval;
k++;
j++;
}
// 获取原始的有序序列
for (i = left; i <= right; i++)
arr[i] = arr[i] / maxval;
}