华为:给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到 output[]数组最中间的位置,如果数组长度n为偶数。。 .
来源:互联网 发布:手机qq软件 编辑:程序博客网 时间:2024/04/26 01:41
01./* 02.给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到 output[]数组最中间的位置, 03.如果数组长度n为偶数,则将数组中最大的元素放到 04.output[]数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边, 05.按照一左一右的顺序,依次存放剩下的数。 06.例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1}; 07. input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3} 08.函数接口 void sorts(int input[], int n, int output[] 09.*/ 10.#include<cstdio> 11.#include<cstring> 12.#include<iostream> 13.#include<math.h> 14.using namespace std; 15./* 16.关于compare 函数:1 参数为const类型的空指针 17. 2 a-b 时为从小到大排序 b-a时是从大到小排序 18.*/ 19.int compare(const void *a,const void *b) 20.{ 21. return *(int *)b-*(int *)a; 22.} 23.void sorts(int input[], int n, int output[]) 24.{ 25. int i; 26. int j; 27. qsort(input, n,sizeof(input[0]),compare); 28. if(n%2 == 1) //最大值放到中间位置,数组元素个数为奇数时的情况 29. { 30. output[(n-1)/2]= input[0]; 31. /*中间放置最大值input[0] 左边放置input[1,3,5...]*/ 32. j=1; 33. for(i=(n-1)/2-1;i>=0;i--) //先放置前一部分 34. { 35. output[i] = input[j]; 36. j+=2; 37. } 38. /*中间放置最大值input[0] 右边边放置input[2,4,6...]*/ 39. j=2; 40. for(i=(n-1)/2+1;i<n;i++) 41. { 42. output[i] = input[j]; 43. j+=2; 44. } 45. } 46. else if(n%2 == 0) //最大值放到中间位置,数组元素个数为偶数时的情况 47. { 48. /*注意:n为数组元素个数(偶数),n-1为数组最大下标为奇数,(n-1+1)/2为中间偏右的位置*/ 49. output[(n)/2]= input[0]; 50. j=1; 51. for(i=(n)/2-1;i>=0;i--) 52. { 53. output[i] = input[j]; 54. j+=2; 55. } 56. j=2; 57. for(i=(n)/2+1;i<n;i++) 58. { 59. output[i] = input[j]; 60. j+=2; 61. } 62. } 63.} 64.int main(/*int argc, char **argv*/) 65.{ 66. int input[6]={3,6,1,9,7,8}; 67. int output[6]={0}; 68. int i; 69. sorts(input, 6, output); 70. for(i=0;i<6;i++) 71. printf("%d ",output[i]); 72. 73. return 0; 74.}