华为软件编程题:排序为倒锥形数组
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; //}
相关文章推荐
- 华为2014软件编程题:排序为倒锥形数组
- 华为OJ——输入整型数组和排序标识,对其元素按照升序或降序进行排序
- 动态规划(1) 编程题#2: 滑雪(C++ STL中Map的按Key排序和按Value排序,memset函数直接将数组中的元素全部置成某个数,常函数)
- 牛客网三道编程题(四)华为机试在线训练(三)将数字逆序输出、将n个字符串按照字典顺序排序
- 面试题-华为-数组去重与排序-2
- 华为机试—整数数组排序(字符串输入输出)
- 2009年华为软件设计大赛两道编程题
- [C/C++]2009年华为软件设计大赛两道编程题
- 华为oj中级 输入整型数组和排序标识,对其元素按照升序或降序进行排序
- 华为编程题:字符串排序
- 华为:对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放,且输出数组第一位放奇数
- 华为软件编程题:随机数按计数输出
- 华为软件编程题:选秀节目打分
- 华为OJ——输入整型数组和排序标识,对其元素按照升序或降序进行排序
- [华为机试练习题]21.二维数组的列排序
- 华为机试题:输入整型数组和排序标识,对其元素按照升序或降序进行排序
- 【C】FindString之华为软件训练营考试_动态创建一个两维数组
- 华为软件编程题:简单的四则运算
- 华为机试——数组排序
- 华为:现有一串字符串,请对字符串中的数字字符按照升序排序,其他非数字字符存储位置保持不变,将结果保存至output数组中