如何对长度为3、末位为中间值的Integer数组排序及插入元素?
实现满足特定顺序的3元素数组插入逻辑
核心思路
咱们的目标是把长度为3的Integer数组最终调整成最小元素在第一位,最大元素在第二位,中间值在第三位的状态(也就是array[0] < array[2] < array[1])。插入过程分两个阶段处理就很清晰:
- 第一阶段:数组只有1个初始元素时,插入第二个值直接放到第二位就行,暂时不用排序;
- 第二阶段:插入第三个值时,把三个元素整体排序,再按要求重新分配位置。
代码实现(Java)
import java.util.Arrays; public class CustomArrayInsert { public static void insertValue(Integer[] array, Integer newValue) { // 用while循环找到第一个空的位置 int insertIndex = 0; while (insertIndex < array.length && array[insertIndex] != null) { insertIndex++; } // 把新值插入到空位置 array[insertIndex] = newValue; // 当插入到第三个元素时,开始调整顺序 if (insertIndex == 2) { // 取出三个元素准备排序 Integer[] temp = new Integer[]{array[0], array[1], array[2]}; // 这里用简单的冒泡排序,也可以直接用Arrays.sort(temp)简化 for (int i = 0; i < temp.length - 1; i++) { for (int j = 0; j < temp.length - 1 - i; j++) { if (temp[j] > temp[j + 1]) { Integer swap = temp[j]; temp[j] = temp[j + 1]; temp[j + 1] = swap; } } } // 按要求重新赋值:最小放[0],最大放[1],中间值放[2] array[0] = temp[0]; array[1] = temp[2]; array[2] = temp[1]; } } public static void main(String[] args) { // 测试示例1:初始值1,插入3,再插入2 Integer[] array1 = new Integer[3]; array1[0] = 1; insertValue(array1, 3); System.out.println("插入3后:" + Arrays.toString(array1)); // 输出 [1, 3, null] insertValue(array1, 2); System.out.println("最终结果:" + Arrays.toString(array1)); // 输出 [1, 3, 2] // 测试示例2:初始值5,插入8,再插入10 Integer[] array2 = new Integer[3]; array2[0] = 5; insertValue(array2, 8); System.out.println("插入8后:" + Arrays.toString(array2)); // 输出 [5, 8, null] insertValue(array2, 10); System.out.println("最终结果:" + Arrays.toString(array2)); // 输出 [5, 10, 8] } }
代码细节说明
- 定位插入位置:通过
while循环遍历数组,找到第一个null的位置,确保新值能正确插入到数组的下一个空位; - 触发顺序调整:只有当插入到第三个位置(索引为2)时,才会启动排序和位置调整,因为这时候数组已经填满,需要满足最终的顺序要求;
- 排序与重分配:把三个元素排序后,直接按「最小→第一位,最大→第二位,中间→第三位」的规则重新赋值,刚好契合
array[0] < array[2] < array[1]的要求。
内容的提问来源于stack exchange,提问作者Michael Garcia
相关产品推荐
相关产品推荐

