企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 按顺序重新排列数组-最小,最大,第二个最小,第二个最大.. > 原文: [https://www.geeksforgeeks.org/rearrange-array-order-smallest-largest-2nd-smallest-2nd-largest/](https://www.geeksforgeeks.org/rearrange-array-order-smallest-largest-2nd-smallest-2nd-largest/) 给定一个整数数组,任务是按以下顺序打印该数组:最小数,最大数,第二最小数,第二最大数,第三最小数,第三最大数,依此类推。 **示例**: ``` Input : arr[] = [5, 8, 1, 4, 2, 9, 3, 7, 6] Output :arr[] = {1, 9, 2, 8, 3, 7, 4, 6, 5} Input : arr[] = [1, 2, 3, 4] Output :arr[] = {1, 4, 2, 3} ``` **简单解决方案**是先找到最小的元素,然后将其与第一个元素交换。 然后找到最大的元素,将其与第二个元素交换,依此类推。 该解决方案的时间复杂度为`O(n^2)`。 **有效解决方案**是使用[排序](https://www.geeksforgeeks.org/sorting-algorithms/)。 1.对数组的元素进行排序。 2.取两个变量`i`和`j`分别指向数组的第一个索引和最后一个索引。 3.现在运行循环,并通过递增`i`和递减`j`来将元素逐一存储在数组中。 让我们以输入为`5 8 1 4 2 9 3 7 6`的数组为例,对它们进行排序,使该数组变为`1 2 3 4 5 6 7 8 9`。 两个变量分别说`i`和`j`并将它们分别指向数组的第一个索引和最后一个索引,运行循环并通过递增`i`和递减`j`将值存储到新数组中。 我们得到的最终结果为`1 9 2 8 3 7 4 65`。 ## C++ ```cpp // C++ program to print the array in given order #include <bits/stdc++.h> using namespace std; // Function which arrange the array. void rearrangeArray(int arr[], int n) {        // Sorting the array elements     sort(arr, arr + n);     int tempArr[n];  // To store modified array     // Adding numbers from sorted array to      // new array accordingly     int ArrIndex = 0;     // Traverse from begin and end simultaneously      for (int i = 0, j = n-1; i <= n / 2 ||                      j > n / 2; i++, j--) {         tempArr[ArrIndex] = arr[i];         ArrIndex++;         tempArr[ArrIndex] = arr[j];         ArrIndex++;     }     // Modifying original array     for (int i = 0; i < n; i++)         arr[i] = tempArr[i]; } // Driver Code int main() {     int arr[] = { 5, 8, 1, 4, 2, 9, 3, 7, 6 };     int n = sizeof(arr) / sizeof(arr[0]);     rearrangeArray(arr, n);     for (int i = 0; i < n; i++)         cout << arr[i] << " ";     return 0; } ```