给定一个数组 input[] ,如果数组长度 n 为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度 n 为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6,
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 bubblesort(int data[], int n)
{
int temp = 0;
for (int i = 0; i < n; i++ )
{
for (int j = i + 1; j < n; j++)
{
if (data[i] < data[j])
{
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}
void sort(int input[], int n, int output[])
{
int *sort_input = new int[n];
for (int i = 0; i < n; i++)
{
sort_input[i] = input[i];
}
bubblesort(sort_input, n);
if (1 == n % 2)
{
int mid = n / 2;
int k = 0;
output[mid] = sort_input[k++];
for (int j = 1; j <= n / 2; j++)
{
output[mid - j] = sort_input[k++];
output[mid + j] = sort_input[k++];
}
}
else
{
int mid = n / 2;
int k = 0;
output[mid] = sort_input[k++];
for (int j = 1; j < n / 2; j++)
{
output[mid - j] = sort_input[k++];
output[mid + j] = sort_input[k++];
}
output[0] = sort_input[k++];
}
delete sort_input;
}
void main()
{
int input1[] = {3, 6, 1, 9, 7};
int output1[5];
memset(output1, 0, 5 * sizeof(int));
int input2[] = {3, 6, 1, 9, 7, 8} ;
int output2[6];
memset(output2, 0, 6 * sizeof(int));
sort(input1, 5, output1);
sort(input2, 6, output2);
for (int k = 0; k < 5; k++)
printf("%d", output1[k]);
printf("\n");
for (k = 0; k < 6; k++)
printf("%d", output2[k]);
printf("\n");
}Ï