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

C++で配列を並べ替える


整数の配列があるとします。それらを昇順で並べ替える必要があります。したがって、配列が[5,2,3,1]のような場合、結果は[1,2,3,5]

になります。

これを解決するには、次の手順に従います-

  • パーティションと呼ばれる1つのメソッドを作成します。これには、配列、低、高が必要です

  • ピボットを設定:=低

  • 低から高の範囲のiの場合– 1

    • nums [i]

  • nums[pivot]とnums[high]

    を交換します
  • sortArr()と呼ばれるメソッドを定義します。これは、配列、低、高を取ります

  • 低>=高の場合、戻る

  • partitionIndex:=partition(nums、low、high)

  • sortArr(nums、low、partitionIndex – 1)

  • sortArr(nums、partitionIndex + 1、high)

  • ローとハイを0、サイズをarr – 1として渡すことにより、mainメソッドからsortArr()を呼び出します

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<string> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   int partition(vector <int>& nums, int low, int high){
      int pivot = low;
      for(int i = low; i < high; i++){
         if(nums[i] < nums[high]){
            swap(nums[i], nums[pivot]);
            pivot++;
         }
      }
      swap(nums[pivot], nums[high]);
      return pivot;
   }
   void sortArr(vector <int>& nums, int low, int high){
      if(low >= high) return;
      int partitionIndex = partition(nums, low, high);
      sortArr(nums, low, partitionIndex - 1);
      sortArr(nums, partitionIndex + 1, high);
   }
   vector<int> sortArray(vector<int>& nums) {
      sortArr(nums, 0, nums.size() - 1);
      return nums;
   }
};
main(){
   vector<int> v1 = {5,2,3,1};
   Solution ob;
   print_vector(ob.sortArray(v1));
}

入力

[5,2,3,1]

出力

[1,2,3,5]

  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