题目:
给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1};
input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3}
函数接口 void sort(int input[], int n, int output[])
#include <iostream> using namespace std; void sort(int input[], int n, int output[]); int main() { int input[] = {3, 6, 1, 9, 7}; int output[5]; sort(input, 5, output); int input2[] = {3, 6, 1, 9, 7, 8}; int output2[6]; sort(input2, 6, output2); return 0; } void sort(int input[], int n, int output[]) { //选择法排序(从大到小) for (int i=0; i<n; i++) { for (int j=i+1; j<n; j++) { if (input[i] < input[j]) { int tmp = input[i]; input[i] = input[j]; input[j] = tmp; } } } for (int i=0; i<n; i++) { cout << input[i] << ","; } cout << endl; int mid;//存放最大数的位置 if (n%2 != 0)//奇数 { mid = (n-1)/2; } else//偶数 { mid = n/2; } int k=1; output[mid] = input[0]; for (int i=1; i<n; i++) { k = (i+1)/2; if (i%2 != 0) { output[mid-k] = input[i]; } else { output[mid+k] = input[i]; } } for (int i=0; i<n; i++) { cout << output[i] << ","; } cout << endl; }