我有一个对象数组,我想按以下顺序按索引排序.我将始终拥有2的幂的数组大小.
示例数组大小:8.指数: [0][1] [2][3] [4][5] [6][7]
排序后: [0][7] [1][6] [2][5] [3][4]
所以基本上在第一个和最后一个元素之间交替,但尚未排序.
我已经想到了这样做的方法,我可以得到"对",但它们的顺序错误(我认为它不适用于2阵列的强大功能吗?).在这里,我使用一个int数组及其索引作为值,使我自己更简单.
int[] array = new int[]{0,1,2,3,4,5,6,7}; int[] sortedArray = new int[8]; for(int i = 0; i < array.length; i+=2){ sortedArray[i] = array[i]; } for(int i = 1; i < array.length; i+=2){ sortedArray[i] = array[array.length - i]; }
输出: [0][7] [2][5] [4][3] [6][1]
您可以使用单个循环执行此操作.考虑以下算法:
int[] array = new int[]{0,1,2,3,4,5,6,7}; int[] sortedArray = new int[8]; for(int i = 0; i < array.length; i+=2){ sortedArray[i] = array[i/2]; sortedArray[i + 1] = array[array.length - i/2 - 1]; } System.out.println(Arrays.toString(sortedArray)); // prints [0, 7, 1, 6, 2, 5, 3, 4]
这通过一次设置两个值来创建最终数组:
结果数组的每个偶数索引都使用初始数组的第一个值进行映射
结果数组的每个奇数索引都使用初始数组的最后一个值进行映射