C++程式實現陣列最大最小交替排列
給定一個整數陣列,其元素可能是有序或無序的。任務是首先對陣列進行排序(如果元素是無序的),然後以特定的方式重新排列陣列,使得陣列的第一個元素為最大值,第二個元素為最小值,第三個元素為第二大值,第四個元素為第二小值,以此類推。
讓我們看看各種輸入輸出場景:
輸入 − int arr[] = {7, 5, 2, 3, 4, 9, 10, 5 }
輸出 − 陣列排序前:2 3 4 5 5 7 9 10 陣列最大最小交替排列後:10 2 9 3 7 4 5 5
解釋 − 給定一個整數型別的陣列,包含元素 {7, 5, 2, 3, 4, 9, 10, 5 }。首先,我們將陣列排序,得到 {2 3 4 5 5 7 9 10 }。其次,將最大元素放在 arr[0],即 10,然後將最小元素放在 arr[1],即 2,然後將第二大元素放在 arr[2],即 9,以此類推。最終的陣列將是 10 2 9 3 7 4 5 5
輸入 − int arr[] = {2, 4, 1, 6, 7}
輸出 − 陣列排序前:1 2 4 6 7 陣列最大最小交替排列後:7 1 6 2 4
解釋 − 給定一個整數型別的陣列,包含元素 {2, 4, 1, 6, 7}。首先,我們將陣列排序,得到 {1 2 4 6 7}。其次,將最大元素放在 arr[0],即 7,然後將最小元素放在 arr[1],即 1,然後將第二大元素放在 arr[2],即 6,以此類推。最終的陣列將是 7 1 6 2 4
下面程式中使用的演算法如下:
輸入一個整數型別的陣列,並計算陣列的大小。呼叫 C++ STL 的 sort 方法,將 arr[] 和陣列大小作為引數傳遞給函式。
列印排序前的陣列,並呼叫函式 Rearr_Max_Min(arr, size)
在函式 Rearr_Max_Min(arr, size) 內部:
宣告一個變數 max 並將其設定為 size - 1,另一個變數 min 並將其設定為 0。宣告一個變數 max_val 並將其設定為 arr[size - 1] + 1。
從 i 為 0 開始迴圈,直到 i 小於 size。在迴圈內部,檢查 IF i % 2 = 0,則將 arr[i] 設定為 arr[i] + (arr[max] % max_val) * max_val,並將 max 減 1。
否則,將 arr[i] 設定為 arr[i] + (arr[min] % max_val) * max_val,並將 min 加 1。
從 i 為 0 開始迴圈,直到 i 小於 size。在迴圈內部,將 arr[i] 設定為 arr[i] / max_val
示例
#include <bits/stdc++.h> using namespace std; void Rearr_Max_Min(int arr[], int size){ int max = size - 1; int min = 0; int max_val = arr[size - 1] + 1; for (int i = 0; i < size; i++){ if (i % 2 == 0){ arr[i] += (arr[max] % max_val) * max_val; max--; } else{ arr[i] += (arr[min] % max_val) * max_val; min++; } } for(int i = 0; i < size; i++){ arr[i] = arr[i] / max_val; } } int main(){ //input an array int arr[] = {7, 5, 2, 3, 4, 9, 10, 5 }; int size = sizeof(arr) / sizeof(arr[0]); //sort an array sort(arr, arr + size); //print the original Array after sorting cout<<"Array before Arrangement: "; for (int i = 0; i < size; i++){ cout << arr[i] << " "; } //calling the function to rearrange the array Rearr_Max_Min(arr, size); //print the array after rearranging the values cout<<"\nRearrangement of an array in maximum minimum form is: "; for(int i = 0; i < size; i++){ cout<< arr[i] << " "; } return 0; }
輸出
如果執行以上程式碼,將生成以下輸出
Array before Arrangement: 2 3 4 5 5 7 9 10 Rearrangement of an array in maximum minimum form is: 10 2 9 3 7 4 5 5