您的位置:首页 > 编程语言

华为软件编程题:排序为倒锥形数组

2013-09-08 17:09 375 查看
/* centre_sort.cpp
* 给定一个数组input[] ,如果数组长度n为奇数,
* 则将数组中最大的元素放到 output[] 数组最中间的位置,
* 如果数组长度n为偶数,则将数组中最大的元素放到
* output[] 数组中间两个位置偏右的那个位置上,
* 然后再按从大到小的顺序,依次在第一个位置的两边,
* 按照一左一右的顺序,依次存放剩下的数。
*/

#include <stdio.h>
#include <stdlib.h>

void sort(int n, int input[], int output[])
{
if (n <= 0 || input == NULL)
{
printf("Date Error!\n");
return;
}

//先对输入数组从大到小排序
//冒泡排序法
int i, j, k;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (input[j] < input[j + 1])
{
k = input[j + 1];
input[j + 1] = input[j];
input[j] = k;
}
}
}

//找出n个数的中间位置
if (n % 2 == 0)
{
j = (n - 1) / 2 + 1;
}
else if (n % 2 == 1)
{
j = (n + 1) / 2 - 1;
}

//将input数组中的数放到output数组中合适位置
for (i = 0; i < n; i++)
{
if (i % 2 == 0)
{
j += i;
}
else if (i % 2 == 1)
{
j -= i;
}
output[j] = input[i];
}

}

int main()
{
int n = 0;
int i = 0;
int input_flag = 0;
int MAX = 2 ^ (8 * sizeof(int) - 1);
printf("How many numbers do you want to input : ");
scanf("%d", &n);

int *input = (int *)malloc(n * sizeof(int));
int *output = (int *)malloc(n * sizeof(int));
printf("Please input the array : ");
for (i = 0; i < n; i++)
{
scanf("%d", &input[i]);
if (input[i] > MAX || input[i] < (0 - MAX -1))
{
printf("The number is too large!\n");
return 0;
}
}

sort(n, input, output);
printf("The sorted array is : ");
for (i = 0; i < n; i++)
{
printf("%d ", output[i]);
}
printf("\n");
return 0;
}

//以上为自己写的,欢迎指正
//下面为网上流传的答案

//#include <stdio.h>
//#include <string.h>
//#include <conio.h>
//
//void sort(int input[], int n, int output[])
//{
//    int i, j;
//    int k = 1;
//    int temp;
//    int med;
//    for(i = 0; i < n - 1; i++)
//    {
//        for(j = 0; j < n - 1 - i; j++)
//        {
//            if(input[j] > input[j + 1])
//            {
//                temp = input[j];
//                input[j] = input[j + 1];
//                input[j + 1] = temp;
//            }
//        }
//    }
//    if(n % 2 != 0)
//    {
//        for(i = 0; i < n; i++)
//        //printf("%2d", input[i]);
//        //printf("\n");
//        med = (n - 1) / 2;
//        output[med] = input[n - 1];
//        for(i = 1; i <= med; i++)
//        {
//            output[med - i] = input[n - 1 - k];
//            output[med + i] = input[n - 2 - k];
//            k = k + 2;
//        }
//    }
//    else
//    {
//
//        for(i = 0; i < n; i++)
//        //printf("%2d", input[i]);
//        //printf("\n");
//        med = n / 2;
//        output[med] = input[n - 1];
//        for(i = 1; i <= med - 1; i++)
//        {
//            output[med - i] = input[n - 1 - k];
//            output[med + i] = input[n - 2 - k];
//            k = k + 2;
//        }
//        output[0] = input[0];
//    }
//    for(i = 0; i < n; i++)
//    {
//        printf("%2d", output[i]);
//    }
//    printf("\n");
//}
//
//int main()
//{
//    int a[6] = {3, 6, 1, 9, 7, 8};
//    int b[6] = {0};
//    for(int i = 0; i < 6; i++)
//    {
//        printf("%2d", a[i]);
//    }
//    printf("\n");
//    sort(a, 6, b);
//    return 0;
//}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐