给定一个数组 input[] ,如果数组长度 n 为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度 n 为偶数,则将数组中最大的元素放到 output[] 数组中间两

给定一个数组 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");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是你的春哥!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值