如何在C中修复此冒泡排序功能?

时间:2016-07-02 16:02:46

标签: c sorting

我将一系列航班信息和航班计数传递给排序功能。在飞行阵列中有飞行ID,例如(H100.15005),我的目标是根据航班ID对航班信息升序进行排序。如何修复冒泡排序功能?

语言:C平台:Mac OS X OS上的虚拟机:Ubuntu(64位) 16.04 LTS编辑器:Vim 7.4约束:必须使用基本排序算法。

这是排序前后的输出以及代码:

    Initial Flights
        Flight Id    From Dest Depart Avail   Unit Price
        H100.15005   SAT  HOU  08:00      4        65.00
        H111.15009   SAT  HOU  17:00     10        65.00
        H555.15022   SAT  DFW  08:00     70        70.00
        H444.15015   ATL  NYC  08:00     10       130.00
        H200.15010   ATL  HOU  08:00     20       120.00
        H222.15005   HOU  ATL  10:00     15       125.00
        H333.15010   ATL  NYC  13:00     20       130.00
        H444.15001   ATL  NYC  08:00     10       130.00
        H100.15006   SAT  HOU  08:00     12        65.00
        H333.15012   ATL  NYC  12:55     60       130.00
        H666.15020   NYC  ATL  01:45     50       140.00
    Sorted Flights
        Flight Id    From Dest Depart Avail   Unit Price
        H100.15005   SAT  HOU  08:00      4        65.00
        H111.15009   SAT  HOU  17:00     10        65.00
        H555.15022   SAT  DFW  08:00     70        70.00
        H444.15015   ATL  NYC  08:00     10       130.00
        H200.15010   ATL  HOU  08:00     20       120.00
        H222.15005   HOU  ATL  10:00     15       125.00
        H333.15010   ATL  NYC  13:00     20       130.00
        H444.15001   ATL  NYC  08:00     10       130.00
        H100.15006   SAT  HOU  08:00     12        65.00
        H333.15012   ATL  NYC  12:55     60       130.00
        H666.15020   NYC  ATL  01:45     50       140.00



     void sortFlights(Flight flightM[], int iFlightCnt) {
            int i;
            int j;
            Flight flightIdTemp;


            for(i = 0; i < (iFlightCnt - 1); i++) {
                for(j = (iFlightCnt - 1); j > i; j--) {
                    if(flightM[j-1].szFlightId > flightM[j].szFlightId) {
                        flightIdTemp = flightM[j-1];
                        flightM[j-1] = flightM[j];
                        flightM[j] = flightIdTemp;
                    }
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

变量szFlightId可能是一个字符串,您想要比较两个字符串的内容。这不适用于C中的>运算符,它只会比较内存地址。您需要使用函数strcmp()代替。

if (strcmp(flightM[j-1].szFlightId, flightM[j].szFlightId) > 0)

(实际上我们不知道类型,但前缀sz经常被用来标记零终止字符串。一些匈牙利开发人员在微软引入了这个惯例,因此被称为匈牙利表示法。)

答案 1 :(得分:0)

     void sortFlights(Flight flightM[], int iFlightCnt) {
        int i;
        int j;
        Flight flightIdTemp;


        for(i = 0; i < (iFlightCnt - 1); i++) {
            for(j = (iFlightCnt - 1); j > i; j--) {
                if(strcmp(flightM[j-1].szFlightId, flightM[j].szFlightId) > 0) {
                    flightIdTemp = flightM[j-1];
                    flightM[j-1] = flightM[j];
                    flightM[j] = flightIdTemp;
                }
            }
        }
    }