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

1 /* centre_sort.cpp 2 * 给定一个数组input[] ,如果数组长度n为奇数, 3 * 则将数组中最大的元素放到 output[] 数组最中间的位置, 4 * 如果数组长度n为偶数,则将数组中最大的元素放到 5 * output[] 数组中间两个位置偏右的那个位置上, 6 * 然后再按从大到小的顺序,依次在第一个位置的两边, 7 * 按照一左一右的顺序,依次存放剩下的数。#include <stdio.h> 11 #include <stdlib.h>sort(int n, int input[], int output[]) 14 { 15if (n <= 0 || input == NULL) 16 {); 18return; 19 }先对输入数组从大到小排序 i, j, k; 24for (i = 0; i < n – 1; i++) 25 { 26for (j = 0; j < n – 1 – i; j++) 27 { 28if (input[j] < input[j + 1]) 29 { 30k = input[j + 1]; 31input[j + 1] = input[j]; 32input[j] = k; 33 } 34 } 35 }(n % 2 == 0) 39 { 40j = (n – 1) / 2 + 1; 41 }(n % 2 == 1) 43 { 44j = (n + 1) / 2 – 1; 45 }(i = 0; i < n; i++) 49 { 50if (i % 2 == 0) 51 { 52j += i; 53 }(i % 2 == 1) 55 { 56j -= i; 57 } 58output[j] = input[i]; 59 } 60 61 } main() 64 { 65int n = 0; 66int i = 0; 67int input_flag = 0; 68int MAX = 2 ^ (8 * sizeof(int) – 1); ); , &n); *input = (int *)malloc(n * sizeof(int)); 73int *output = (int *)malloc(n * sizeof(int)); ); 75for (i = 0; i < n; i++) 76 {, &input[i]); 78if (input[i] > MAX || input[i] < (0 – MAX -1)) 79 {); ; 82 } 83 } 84 85 sort(n, input, output); ); 87for (i = 0; i < n; i++) 88 {, output[i]); 90 }); ; 93 }以上为自己写的,,欢迎指正 97 //下面为网上流传的答案#include <stdio.h>100 //#include <string.h>101 //#include <conio.h>void sort(int input[], int n, int output[])104 //{105 // int i, j; 106 // int k = 1; 107 // int temp; 108 // int med; 109 // for(i = 0; i < n – 1; i++)110 // {111 //for(j = 0; j < n – 1 – i; j++)112 //{113 //if(input[j] > input[j + 1])114 //{115 //temp = input[j]; 116 //input[j] = input[j + 1]; 117 //input[j + 1] = temp; 118 //}119 //}120 // }121 // if(n % 2 != 0)122 // {123 //for(i = 0; i < n; i++)printf(“%2d”, input[i]); printf(“\n”); 126 //med = (n – 1) / 2; 127 //output[med] = input[n – 1]; 128 //for(i = 1; i <= med; i++)129 //{130 //output[med – i] = input[n – 1 – k]; 131 //output[med + i] = input[n – 2 – k]; 132 //k = k + 2; 133 //}134 // }135 // else136 // {for(i = 0; i < n; i++)printf(“%2d”, input[i]); printf(“\n”); 141 //med = n / 2; 142 //output[med] = input[n – 1]; 143 //for(i = 1; i <= med – 1; i++)144 //{145 //output[med – i] = input[n – 1 – k]; 146 //output[med + i] = input[n – 2 – k]; 147 //k = k + 2; 148 //}149 //output[0] = input[0]; 150 // }151 // for(i = 0; i < n; i++)152 // {153 //printf(“%2d”, output[i]); 154 // }155 // printf(“\n”); 156 //}int main()159 //{160 // int a[6] = {3, 6, 1, 9, 7, 8}; 161 // int b[6] = {0}; 162 // for(int i = 0; i < 6; i++)163 // {164 //printf(“%2d”, a[i]); 165 // }166 // printf(“\n”); 167 // sort(a, 6, b); 168 // return 0; 放下一种执着,收获一种自在。放下既是一种理性抉择,也是一种豁达美。

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

相关文章:

你感兴趣的文章:

标签云: