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


      1 /* centre_sort.cpp
      2  * 给定一个数组input[] ,如果数组长度n为奇数,
      3  * 则将数组中最大的元素放到 output[] 数组最中间的位置,
      4  * 如果数组长度n为偶数,则将数组中最大的元素放到
      5  * output[] 数组中间两个位置偏右的那个位置上,
      6  * 然后再按从大到小的顺序,依次在第一个位置的两边,
      7  * 按照一左一右的顺序,依次存放剩下的数。
      8  */
      9 
     10 #include <stdio.h>
     11 #include <stdlib.h>
     12 
     13 void sort(int n, int input[], int output[])
     14 {
     15     if (n <= 0 || input == NULL)
     16     {
     17         printf("Date Error!
    "); 
     18         return; 
     19     }
     20 
     21     //先对输入数组从大到小排序
     22     //冒泡排序法
     23     int i, j, k; 
     24     for (i = 0; i < n - 1; i++)
     25     {
     26         for (j = 0; j < n - 1 - i; j++)
     27         {
     28             if (input[j] < input[j + 1])
     29             {
     30                 k = input[j + 1]; 
     31                 input[j + 1] = input[j]; 
     32                 input[j] = k; 
     33             }
     34         }
     35     }
     36 
     37     //找出n个数的中间位置
     38     if (n % 2 == 0)
     39     {
     40         j = (n - 1) / 2 + 1; 
     41     }
     42     else if (n % 2 == 1)
     43     {
     44         j = (n + 1) / 2 - 1; 
     45     }
     46 
     47     //将input数组中的数放到output数组中合适位置
     48     for (i = 0; i < n; i++)
     49     {
     50         if (i % 2 == 0)
     51         {
     52             j += i; 
     53         }
     54         else if (i % 2 == 1)
     55         {
     56             j -= i; 
     57         }
     58         output[j] = input[i]; 
     59     }
     60     
     61 }
     62 
     63 int main()
     64 {
     65     int n = 0; 
     66     int i = 0; 
     67     int input_flag = 0; 
     68     int MAX = 2 ^ (8 * sizeof(int) - 1); 
     69     printf("How many numbers do you want to input : "); 
     70     scanf("%d", &n); 
     71 
     72     int *input = (int *)malloc(n * sizeof(int)); 
     73     int *output = (int *)malloc(n * sizeof(int)); 
     74     printf("Please input the array : "); 
     75     for (i = 0; i < n; i++)
     76     {
     77         scanf("%d", &input[i]); 
     78         if (input[i] > MAX || input[i] < (0 - MAX -1))
     79         {
     80             printf("The number is too large!
    "); 
     81             return 0; 
     82         }
     83     }
     84 
     85     sort(n, input, output); 
     86     printf("The sorted array is : "); 
     87     for (i = 0; i < n; i++)
     88     {
     89         printf("%d ", output[i]); 
     90     }
     91     printf("
    "); 
     92     return 0; 
     93 }
     94 
     95 
     96 //以上为自己写的,欢迎指正
     97 //下面为网上流传的答案
     98 
     99 //#include <stdio.h>
    100 //#include <string.h>
    101 //#include <conio.h>
    102 //
    103 //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++)
    124 //        //printf("%2d", input[i]); 
    125 //        //printf("
    "); 
    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 //    else
    136 //    {
    137 //                
    138 //        for(i = 0; i < n; i++)
    139 //        //printf("%2d", input[i]); 
    140 //        //printf("
    "); 
    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("
    "); 
    156 //}
    157 //
    158 //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("
    "); 
    167 //    sort(a, 6, b); 
    168 //    return 0; 
    169 //}
  • 相关阅读:
    异步--记录
    css过渡——实现元素的飞入飞出
    使用touch操作图片
    .net mvc中epplus导出excel
    html无卡顿动画实现——requestAnimationFrame
    调用手机摄像头并上传图片--jquery ajax
    jquery form表单赋值封装
    记录
    .net mvc 使用 aspose.cells导出数据
    explain简介
  • 原文地址:https://www.cnblogs.com/andrewlee0708/p/sort.html
Copyright © 2020-2023  润新知