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

C ++に組み込まれているソート関数を使用して、正の数と負の数を並べ替えます


正の数と負の数の両方を含む整数型の配列、たとえば、任意のサイズのarr[]が与えられます。タスクは、配列のすべての要素がC ++ STLの組み込みの並べ替え機能と、結果のコーディングと印刷の再帰的手法を使用して並べ替えられるように、配列を再配置することです。

このためのさまざまな入出力シナリオを見てみましょう-

入力 − int arr [] ={4、2、-1、-1、6、-3、0}

出力 −組み込みのソート機能を使用した正と負の数の再配置は次のとおりです。-3-1 -1 0 2 4 6.

説明 −正の要素と負の要素の両方を含むサイズ7の整数配列が与えられます。ここで、配列のすべての要素が並べ替えられるように配列を再配置します。つまり、すべての負の要素がすべての正の要素の前に表示され、最終結果は-3 -1 -1 0 246になります。

>

入力 − int arr [] ={-9、-10、2、3、10、5、8、4}

出力 −組み込みのソート機能を使用した正と負の数の再配置は次のとおりです。-10-9 2 3 4 5 8 10.

説明 −正の要素と負の要素の両方を含むサイズ8の整数配列が与えられます。ここで、配列のすべての要素が並べ替えられるように配列を再配置します。つまり、すべての負の要素がすべての正の要素の前に表示され、最終結果は-10 -9 2 3 4 5810になります。

以下のプログラムで使用されているアプローチは次のとおりです

sort()の使用

  • 整数型要素の配列を入力し、配列のサイズを計算します。

  • データを関数Rearrangement(int arr []、int size)

    に渡します
  • 関数内で、Rearrangement(int arr []、int size)

    • 配列と配列のサイズをパラメーターとして関数に渡すことにより、C ++ STLの並べ替え関数を呼び出すと、並べ替えられた配列が返されます。

  • 結果を印刷します。

再帰の使用

  • 整数型要素の配列を入力し、配列のサイズを計算します。

  • 一時変数、たとえばtempを宣言します。

  • iからiまでのループFORを配列のサイズより小さく開始します。ループ内で、arr [i]が0未満かどうかを確認してから、温度を1ずつ上げます。

  • 関数へのパラメーターとして配列、0、およびサイズ-1を渡すことにより、Rearrangement(arr、0、(size-1))を呼び出します。

  • 配列、温度、サイズ-1を関数に渡して、rotate関数を呼び出します。

  • 関数Rearrangement(int arr []、int first、int last)の内部

    • IFが最初に最後に等しいかどうかを確認してから、戻ります。

    • 関数Rearrangement()を再帰的に呼び出し、配列、最初の+1、最後の要素をパラメーターとして渡します。

    • 0より大きいIFarr[first]をチェックしてから、Rotate(arr、(first + 1)、last)およびRotate(arr、first、last)として関数を呼び出します

  • 関数Rotate(int arr []、int first、int last)内

    • 最初が最後よりも少ない時間に開始します。 while内で、整数変数をtempとして宣言し、arr [first]で設定してから、arr[first]をarr[last]に設定し、arr [last]をtempに設定します。最初の変数を1ずつインクリメントし、最後の変数を1デクリメントします。

  • 結果を印刷します。

1。 sort()関数の使用

#include <bits/stdc++.h>
using namespace std;
//using the sort() function
void Rearrangement(int arr[], int size){
   sort(arr, arr + size);
}
int main(){
   int arr[] = {4, 2, -1, -1, 6, -3, 0};
   int size = sizeof(arr)/sizeof(arr[0]);
   //calling the function to rearrange the array
   Rearrangement(arr, size);
   //print the array after rearranging the values
   cout<<"Rearrangement of positive and negative numbers using inbuilt sort function is: ";
   for(int i = 0; i < size; i++){
      cout<< arr[i] << " ";
   }
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます

Rearrangement of positive and negative numbers using inbuilt sort function is: -3 -1 -1 0 2 4 6

2。関数への再帰呼び出し

#include <bits/stdc++.h>
using namespace std;
void Rotate(int arr[], int first, int last){
   while(first < last){
      int temp = arr[first];
      arr[first] = arr[last];
      arr[last] = temp;
      first++;
      last--;
   }
}
void Rearrangement(int arr[], int first, int last){
   if(first == last){
      return;
   }
   Rearrangement(arr, (first + 1), last);
   if(arr[first] >= 0){
      Rotate(arr, (first + 1), last);
      Rotate(arr, first, last);
   }
}
int main(){
   int arr[] = {4, 2, -1, -1, 6, -3, 0};
   int size = sizeof(arr)/sizeof(arr[0]);
   int temp = 0;
   for(int i = 0; i < size; i++){
      if(arr[i] < 0){
         temp++;
      }
   }
   //calling the function to rearrange the array
   Rearrangement(arr, 0, (size - 1));
   Rotate(arr, temp, (size - 1));
   //print the array after rearranging the values
   cout<<"Rearrangement of positive and negative numbers using Recursion is: ";
   for(int i = 0; i < size; i++){
      cout<< arr[i] << " ";
   }
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます

Rearrangement of positive and negative numbers using Recursion is: -1 -1 -3 4 2 6 0

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

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

  2. 配列をC++関数に渡す

    C ++では、配列全体を引数として関数に渡すことはできません。ただし、インデックスなしで配列の名前を指定することにより、配列へのポインタを渡すことができます。 1次元配列を関数の引数として渡したい場合は、次の3つの方法のいずれかで関数の仮パラメーターを宣言する必要があります。3つの宣言メソッドはすべて、整数ポインターが実行されることをコンパイラーに通知するため、同様の結果を生成します。受け取る必要があります。 配列を関数に渡す方法は3つあります- ポインタとしての正式なパラメータ void myFunction(int *param) {    // Do so