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

鳩の巣ソート用のC++プログラム?


鳩の巣ソートは、非比較ソート手法の例です。アイテムの数と可能なキー値の範囲がほぼ同じである場合に使用されます。

このようなことを行うには、いくつかの穴を開ける必要があります。必要な穴の数は、数の範囲によって決まります。各穴にアイテムが挿入されます。最後に穴から削除され、並べ替えられた順序で配列に格納されます。

鳩の巣ソートは、カウントソートとも呼ばれ、要素の数(n)と可能なキー値の数(N)がほぼ同じである要素のリストをソートするのに適したソートアルゴリズムです。[1] O(n + N)時間が必要です。

Input: arr[]={7,4,2,6,3,1,5}
Output: 1 2 3 4 5 6 7

説明

  • 配列内の最小要素と最大要素を見つけます。最小要素と最大要素は、それぞれ「最小」と「最大」になります。次に、範囲を「max-min-1」として見つけます。

  • 範囲と同じサイズの「ピジョンホール」に対して、最初は空の配列を設定します。

  • 配列の各要素をトラバースしてから、各要素をピジョンホールに配置します。要素arr[i]は、インデックスarr [i] –minで穴に入れられます。

  • ループはピジョンホール配列全体で順番に開始され、空でない穴のすべての要素が元の配列に戻されます。

#include <iostream>
using namespace std;
#define MAX 7
void pigeonhole_sort(int, int, int *);
int main() {
   int i, min, max;
   int a[]={7,4,2,6,3,1,5};
   min = a[0];
   max = a[0];
   for (i = 1; i < MAX; i++) {
      if (a[i] < min) {
         min = a[i];
      }
      if (a[i] > max) {
         max = a[i];
      }
   }
   pigeonhole_sort(min, max, a);
   for (i = 0; i < MAX; i++) {
      cout<< a[i]<<"\t";
   }
}
void pigeonhole_sort(int mi, int ma, int * a) {
   int size, count = 0, i;
   int *current;
   current = a;
   size = ma - mi + 1;
   int holes[size];
   for (i = 0; i < size; i++) {
      holes[i] = 0;
   }
   for (i = 0; i < size; i++, current++) {
      holes[*current-mi] += 1;
   }
   for (count = 0, current = &a[0]; count < size; count++) {
      while (holes[count]--> 0) {
         *current++ = count + mi;
      }
   }
}

出力

1 2 3 4 5 6 7

  1. 配列要素の乗算のためのC++プログラム

    整数要素の配列で与えられ、タスクは配列の要素を乗算して表示することです。 例 Input-: arr[]={1,2,3,4,5,6,7} Output-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 Input-: arr[]={3, 4,6, 2, 7, 8, 4} Output-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 以下のプログラムで使用されるアプローチは次のとおりです − 一時変数を初期化して、最終結果を1で格納します ループを0からnまで開始します。nは配列のサイズです 最終結果を得るには、tempの値にarr[i]を掛け続

  2. C++での8進数から10進数への変換のプログラム

    入力として8進数を指定すると、タスクは指定された8進数を10進数に変換することです。 コンピューターの10進数は10進数で表され、8進数は0から7までの8進数で表されますが、10進数は0から9までの任意の数字にすることができます。 8進数を10進数に変換するには、次の手順に従います- 余りから右から左に数字を抽出し、それを0から始まる累乗で乗算し、(桁数)–1まで1ずつ増やします。 8進数から2進数に変換する必要があるため、8進数の基数は8であるため、累乗の基数は8になります。 指定された入力の桁にベースとパワーを掛けて、結果を保存します 乗算されたすべての値を加算して、10進数になる