C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でKの倍数の間に発生する配列の要素を並べ替えます


配列Aと別の整数Kがあるとします。Kの任意の2つの倍数の間にある要素を並べ替える必要があります。Aが[2、13、3、1、21、7、8、13、12のようであるとします。 ]、およびK =2。出力は[2、1、3、7、13、21、8、13、12]になります。ここで、2の倍数は2、8、および12であり、2と8の間の要素は13、3、1、21、7であり、1、3、7、13、21、8から12の間の要素としてソートされます。はわずか13なので、すでに並べ替えられています。

配列をトラバースし、値Kの倍数を追跡する必要があります。次に、Kの2番目の倍数から始めて、現在と前のKの倍数の間ですべての要素を並べ替えます。

#include <iostream>
#include <algorithm>
using namespace std;
void display(int arr[], int n) {
   for (int i = 0; i < n; i++)
   cout << arr[i] << " ";
}
void sortBetweenMultipleOfK(int arr[], int n, int k) {
   int prev_index = -1;
   for (int i = 0; i < n; i++) {
      if (arr[i] % k == 0) {
         if (prev_index != -1) //check whether that is not the first multiple of k
         sort(arr + prev_index + 1, arr + i);
         prev_index = i;
      }
   }
}
int main() {
   int arr[] = {2, 13, 3, 1, 21, 7, 8, 13, 12};
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 2;
   cout << "Before Sort: "; display(arr, n);
   sortBetweenMultipleOfK(arr, n, k);
   cout << "\nAfter Sort : "; display(arr, n);
}

出力

Before Sort: 2 13 3 1 21 7 8 13 12
After Sort : 2 1 3 7 13 21 8 13 12

  1. C++の別の配列で定義された順序に従って配列を並べ替えます

    このセクションでは、別のソートの問題が発生します。 2つの配列A1とA2があるとします。要素間の相対的な順序がA2の場合と同じになるように、A1を並べ替える必要があります。一部の要素がA2に存在しない場合、それらはソートされた要素の後に追加されます。 A1とA2が次のようになっていると仮定します- A1 = {2, 1, 2, 1, 7, 5, 9, 3, 8, 6, 8} A2 = {2, 1, 8, 3} ソート後、A1は以下のようになります- A1 = {2, 2, 1, 1, 8, 8, 3, 5, 6, 7, 9} この問題を解決するために、カスタム比較メソッドを作成します。この

  2. ヒープソートアルゴリズムを使用して10個の要素の配列をソートするC++プログラム

    ヒープソートは、バイナリヒープデータ構造に基づいています。バイナリヒープでは、親ノードの子ノードは最大ヒープの場合はそれ以下であり、親ノードの子ノードは最小ヒープの場合はそれ以上です。 ヒープソートのすべてのステップを説明する例は次のとおりです。 並べ替え前の10個の要素を含む元の配列は-です 20 7 1 54 10 15 90 23 77 25 この配列は、max-heapifyを使用してバイナリ最大ヒープに組み込まれています。配列として表されるこの最大ヒープは、次のように与えられます。 90 77 20 54