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
-
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} この問題を解決するために、カスタム比較メソッドを作成します。この
-
ヒープソートアルゴリズムを使用して10個の要素の配列をソートするC++プログラム
ヒープソートは、バイナリヒープデータ構造に基づいています。バイナリヒープでは、親ノードの子ノードは最大ヒープの場合はそれ以下であり、親ノードの子ノードは最小ヒープの場合はそれ以上です。 ヒープソートのすべてのステップを説明する例は次のとおりです。 並べ替え前の10個の要素を含む元の配列は-です 20 7 1 54 10 15 90 23 77 25 この配列は、max-heapifyを使用してバイナリ最大ヒープに組み込まれています。配列として表されるこの最大ヒープは、次のように与えられます。 90 77 20 54