按要求获得序列

题目:

给定一个数组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;
}
posted @ 2012-10-10 21:25  涵曦  阅读(261)  评论(0编辑  收藏  举报