2016-07-02 5 views
-2

私は、フライト情報の配列とフライト数をソート関数に渡しています。フライトアレイ内にはフライトID(例:H100.15005)があり、私の目標はフライト情報に基づいてフライト情報の昇順で並べ替えることです。どのようにバブルソート機能を修正できますか?Cでこのバブルソート機能を修正するにはどうすればよいですか?

言語:Cプラットフォーム:Ubuntuの(64ビット) 16.04 LTSエディタ:Vimの7.4制約:MacのOS X OS上の仮想マシンの基本的なソートアルゴリズムを使用する必要があります。ここで

は前とコードとともに出力をソートした後です:

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; 
        } 
       } 
      } 
     } 
+0

投稿を編集して、実装に現在間違っていることの説明を含めることはできますか? – fractalwrench

+0

'>'の代わりに 'strcmp'を使います。 – BLUEPIXY

答えて

0

変数szFlightIdは、おそらく文字列であり、あなたは二つの文字列の内容を比較したいです。これはメモリアドレスを比較するだけのCの>演算子では機能しません。代わりに関数strcmp()を使用する必要があります。

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

(実際に私たちは、型を知りませんが、プリフィックスszは、多くの場合、ゼロで終了する文字列をマークするために使用されています。マイクロソフトの一部ハンガリーの開発者は、したがって、ハンガリアン記法と呼ばれるこの大会を導入しました。)

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; 
       } 
      } 
     } 
    } 
+0

説明が少し役立ちます。なぜ、1行だけが変更されたときに完全なコードをコピーするのですか? –

関連する問題