【问题标题】:having trouble with bubble sort冒泡排序有问题
【发布时间】:2015-10-17 23:34:38
【问题描述】:

我需要在程序中对航班进行排序

H100.15005 SAT HOU 08:00 4 65.00   
H111.15009 SAT HOU 17:00 10 65.00   

我使用冒泡排序使它们按航班号降序排列 我目前的程序是

void sortFlights(Flight flightM[], int iFlightCnt)
{
Flight temp;
int i, j, bChange = 1;
for (i = 0; i < (iFlightCnt - 1) && bChange == 1; i++)
{
    bChange = 0;
    for (j = 0; j < (iFlightCnt - i - 1); j++)
    {
        if (strcmp(flightM[i + 1].szFlightId, flightM[i].szFlightId) < 0)
        {
            temp = flightM[i];
            flightM[i] = flightM[i + 1];
            flightM[i + 1] = (Flight)temp;
            bChange = 1;
        }
    }
    }
}

目前航班未分类。我重新检查了 for 循环,但无法弄清楚

【问题讨论】:

    标签: c bubble-sort


    【解决方案1】:

    问题

    • strcmp比较方向
    • 用 stcmp 和内循环引用索引(需要引用 j+1 和 j 而不是 i..)

    调整后的代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    /* stub structure to replicate problem */
    typedef struct
    {
      char szFlightId[11];
    }Flight;
    
    void sortFlights(Flight flightM[], int iFlightCnt)
    {
      Flight temp;
      int i, j, bChange = 1;
      for (i = 0; i < (iFlightCnt - 1) && bChange == 1; i++)
      {
        bChange = 0;
        for (j = 0; j < (iFlightCnt - i - 1); j++)
        {
          if (strcmp(flightM[j + 1].szFlightId, flightM[j].szFlightId) > 0) 
             /* change: reference j+1, 
                        direction of strcmp comparison for desired sort order */
          {
            temp = flightM[j];
            flightM[j] = flightM[j + 1];    /* change: reference j+1 */
            flightM[j + 1] = (Flight)temp;  /* change: reference j+1 */
            bChange = 1;
          }
        }
      }
    }
    
    /* convenience output function */
    void printFlights(Flight *flightM, int iFlightCnt)
    {
      int index;
      for(index = 0; index < iFlightCnt; index++)
      {
        printf("%d: %s\n", index, flightM[index].szFlightId);
      }
    }
    
    int main(void)
    {
      Flight flightM[2];
      sprintf(flightM[0].szFlightId, "H100.15005");
      sprintf(flightM[1].szFlightId, "H100.15009");
      printf("==== input  ====\n");
      printFlights(flightM, 2);
      sortFlights(flightM, 2);
      printf("\n");
      printf("==== output ====\n");
      printFlights(flightM, 2);
      return 0;
    }
    

    输出

    $ ./sort_flights 
    ==== input  ====
    0: H100.15005
    1: H100.15009
    
    ==== output ====
    0: H100.15009
    1: H100.15005
    

    参考

    【讨论】:

      猜你喜欢
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 2021-08-15
      • 2021-01-29
      • 2019-04-18
      相关资源
      最近更新 更多