2016-04-02 7 views
0

私は動的に割り当てられたオブジェクトの配列を持っています。配列の一部にはオブジェクトが設定されていますが、他の部分はnullです。バブルソートを使用して配列内のオブジェクトをソートすると、ソートは正しく行われますが、nullの配列部分は配列された配列部分の前にあります。正面ではなく、アレイの背面にヌルオブジェクトをプッシュする方法はありますか?アレイ内で何が起こっているかの動的に割り当てられたオブジェクトの配列内のヌルオブジェクトをソートする方法。ヌルオブジェクトは配列の後ろにあります。C++

写真:

| null | null | null | object | object | 

私は配列を見えるようにしたいものの絵:ここ

| object| object | null | null | null | 

は私のバブルソートのために私のコードです:

::bubbleSort() 
{ 
    bool flag = true; 
    obj temp; 
    int j = 0; 

    while(flag) 
    { 
    flag = false; 
    j++; 

    for(int i = 0; i < (max - j); i++) 
    { 
     if(arr[i] > arr[i + 1]) 
     { 
     temp = arr[i]; 
     arr[i]= arr[i+1]; 
     arr[i+1] = temp; 
     flag = true; 
     } 
    } 
    } 
} 

ここに私の住所を定義します:

private: 
obj *arr; 

はその後、私のコンストラクタ

max = 25 
arr = new obj[max]; 
+0

バブルソートコードを質問に追加できますか?人々が答えを提供するのに役立ちます。 –

+0

あなたのコードで比較を行っている場合は、nullを他のすべてよりも小さくする代わりに、それ以外のものよりも大きいと考えてください。 –

+0

私の比較は私の演算子のオーバーロード< >で行われている、私はそこにオブジェクトを比較している文字列と何かの提案を述べていくつかのコードを追加する必要がありますか? – nwduck

答えて

1

であなただけのカスタムコンパレータとstd::sortを使用することができます。

std::sort(std::begin(arr), std::end(arr), [](auto *p1, auto *p2) { 
    if (p1 == nullptr) { 
     return false; 
    } 

    if (p2 == nullptr) { 
     return true; 
    } 

    return *p1 < *p2; 
}); 

これは、カスタムタイプがoperator<を定義することを前提としています。もちろん、好きなものを使って比較することもできます。

独自のソートアルゴリズムを実装する必要がある場合は、コンパレータ関数の本体をソートコードの真ん中にインライン展開することができます。

+0

ご回答いただきありがとうございました。また、オブジェクトの文字列要素を処理するために< and >をオーバーロードしました。このようなものの中には、私たちが学んだものよりも少し先進的なものがありますが、私は未知のものをいくつか調べ、自分のコードに追加しようとします。再度、感謝します。 – nwduck

+0

'p1-> operator <(p2)'でソートを使用できる型を制限するのはなぜですか? '* p1 <* p2'はコードをより柔軟にします。 – kfsone

+0

@kfsoneもちろん、そうです。それは脳のおならでした。 –

1

あなたが望む機能がstd::partitionであれば、その後ろにヌルがあることが望ましいでしょう。他の値をソートする必要がある場合は、std::sortが適切です。両方とも、並べ替えや分割の順序を定義する比較を定義することができ、要素の並べ替え方法をカスタマイズできます。

関連する問題