0

私は実際に配列を昇順でソートするコードを書き込もうとしているので、これが私が持っているものであると言うことが起こります。

char myListArray[10][40];
myListArray = "Yeah?",
              "Tomorrow",
              "Again",
              "I will see you";

つまり、ASCII値の順に並べ替える必要があります。

Again
I will see you
Tomorrow
Yeah?

私はこのようなものを作成しました...

char temp[40];
temp[0] = '\0';           
int i, j, pos = 10, flag = 1;

for(i = 1; (i <= pos) && flag; i++)
{
    flag = 0;
    for (j=0; j < (pos -1); j++)
    {
        if (phrase[i][j+1] > phrase[i][j])     
        {
            strcpy(temp, phrase[i]);
            strcpy(phrase[i], phrase[i+1]);
            strcpy(phrase[i+1], temp);
            flag = 1;
        }
    }
}

ロジックに問題があるのか​​わかりませんが、簡単に並べ替える関数があるかどうか知りたいですか?またはbubble sort最も簡単ですか?

アップデート:

以下の答えの1つを受け入れますが、最も簡単な方法で配列をソートする方法の解決策を見つけました。

while(pos < 9){

  if(phrase[pos][i] > phrase[pos+1][i]){


   strcpy(temp, phrase[pos]);
   strcpy(phrase[pos], phrase[pos+1]);
   strcpy(phrase[pos+1], temp);
   flag = 1;

 if(flag = 1){

    pos = 0;

  }


  }

pos++;

}
4

3 に答える 3

2

std::arraystd::string、およびstd::sort...を使用して

std::array<std::string, 4> arr = { "Yeah?", "Tomorrow", "Again", "I will see you" };
std::sort(arr.begin(), arr.end());

これは、C 配列を使用する場合、またはstd::vectorsにアクセスできない場合にも簡単に適用できますstd::array

于 2012-06-13T00:37:19.383 に答える
1

簡単にソートできる機能があれば教えてください。

  • stringvectorおよびなどの C++ 構文を使用してみてくださいsort。あなたの仕事ははるかに簡単になります。
  • ただし、C を使用する場合は、 を参照できますqsort。ただし、カスタム コンパレータ関数を提供する必要があります。

バブルソートが一番簡単?

並べ替えアルゴリズムの選択は、最悪の場合のパフォーマンス、要素の数などの要因によって異なります。並べ替える必要がある要素の数について考えてください。どのようなパフォーマンスが受け入れられるかを考えてください。IMO、バブルソートの実装は、挿入ソートやシェルソートと同じくらい簡単です。マージソート/クイックソート/基数ソートOTOHは、おそらくもう少し複雑です。

于 2012-06-13T00:26:03.790 に答える
1

あなたがそうであるように、プレーンCを使用したい場合は、strcmpandを見逃していますqsortあなたのコードは C++ とは何の関係もないことに注意してください。これは古典的な C コードであり、質問のタグが間違っています。C++ で実行する場合は、実際に C++ コンテナーを使用する他の回答を参照してください。単なる C ではなく、実際に C++ を構成する部分を使用しなければ、C++ を使用しても意味がありません。

以下は自己完結型の実例です。2D 配列と文字列へのポインターの配列の両方の例があることに注意してください。2D 配列の宣言に余分な 1 番目の配列サイズがありました。不要です。コンパイラは文字列の数を認識しています。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void sort1(void)
{
    // 2D array
    char strings[][40] = {
        "Yeah?",
        "Tomorrow",
        "Again",
        "I will see you"
    };
    const int el_size = sizeof(strings[0]);
    const int el_count = sizeof(strings)/el_size;
    int i;
    printf("\n%s\n", __FUNCTION__);
    qsort(strings, el_count, el_size, strcmp);
    for (i = 0; i < el_count; ++i) {
        printf("%s\n", strings[i]);
    }
}

int strcmp_ptr(const char ** a, const char ** b)
{
    return strcmp(*a, *b);
}

void sort2(void)
{
    // Array of pointers to string constants
    const char * strings[] = {
        "Yeah?",
        "Tomorrow",
        "Again",
        "I will see you"
    };
    const int el_size = sizeof(strings[0]);
    const int el_count = sizeof(strings)/el_size;
    int i;
    printf("\n%s\n", __FUNCTION__);
    qsort(strings, el_count, el_size, strcmp_ptr);
    for (i = 0; i < el_count; ++i) {
        printf("%s\n", strings[i]);
    }
}

int main(void)
{
    sort1();
    sort2();
    return 0;
}
于 2012-06-13T03:24:45.390 に答える