请问下列数列该如何排序?

将1 2 3 4 5 6 7 8 9 10变为 1 6 2 7 3 8 4 9 5 10

C语言版

int* shuffle(int* nums, int numsSize, int n, int* returnSize) {

    int* left = &nums[0];

    int* right = &nums[n];

    int* res = (int*)malloc(sizeof(int) * numsSize);

    int index = 0;

    while (left < &nums[n] && right < &nums[numsSize]) {

        res[index] = *left;

        res[index + 1] = *right;

        index += 2;

        left++;

        right++;

    }

    *returnSize = numsSize;

    return res;

}

可以发现规律,是12345和678910依次交叉排列而成的,所以你可以先将前一个数组(未排序得先排序)拆分成两个数组,然后同时遍历两个数组将元素依次放入原来的数组。

请问可以具体写一下代码吗,我是新手,实在不懂该如何拆分

你可以直接int i;

在for()循环中输入scanf("%d ",&i)

直接输出printf("1 6 2 7 3 8 4 9 5 10");

上面的是直接要结果

如果想要的是转化过程就是和楼上说的一样

leetcode有此题

import java.util.ArrayList;
import java.util.List;

public class Solution1470 {

    public int[] shuffle(int[] nums, int n) {
        int[] res = new int[2 * n];
        for (int i = 0; i < n; i++) {
            res[2 * i] = nums[i];
            res[2 * i + 1] = nums[i + n];
        }
        return res;
    }

    public static void main(String[] args) {
        int[] numsin = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        int nin = 5;

        Solution1470 s = new Solution1470();

        int[] res = s.shuffle(numsin, nin);
        for (int i = 0; i < res.length; i++) {
            System.out.println(res[i]);
        }

    }
}
 

1
6
2
7
3
8
4
9
5
10