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

パンケーキの並べ替えの問題?


ここでは、Pancakesortという名前の別の並べ替えの問題が発生します。この問題は単純です。アレイが1つあります。これを並べ替える必要があります。ただし、使用できる操作はrev(arr、i)の1つだけです。これにより、arrの要素が0からi番目の位置に反転します。

このアイデアは、選択ソートのようなものです。 max要素を最後に繰り返し配置して、配列のサイズを縮小します。アイデアを得るためのアルゴリズムを見てみましょう。

アルゴリズム

pancakeSort(arr、n)

Begin
   size := n
   while size > 1, do
      index := index of max element in arr from [0 to size – 1]
      rev(arr, index)
      rev(arr, size - 1)
      size := size - 1
   done
End

#include<iostream>
using namespace std;
void rev(int arr[], int i) {
   int temp, st = 0;
   while (st < i) {
      temp = arr[st];
      arr[st] = arr[i];
      arr[i] = temp;
      st++;
      i--;
   }
}
int maxIndex(int arr[], int n) {
   int index, i;
   for (index = 0, i = 0; i < n; ++i){
      if (arr[i] > arr[index]) {
         index = i;
      }
   }
   return index;
}
int pancakeSort(int arr[], int n) {
   for (int size = n; size > 1; size--) {
      int index = maxIndex(arr, size);
      if (index != size-1) {
         rev(arr, index);
         rev(arr, size-1);
      }
   }
}
int main() {
   int arr[] = {54, 85, 52, 25, 98, 75, 25, 11, 68};
   int n = sizeof(arr)/sizeof(arr[0]);
   pancakeSort(arr, n);
   cout << "Sorted array: ";
   for (int i = 0; i < n; ++i)
   cout << arr[i] << " ";
}

出力

Sorted array: 11 25 25 52 54 68 75 85 98

  1. バックトラッキングの概要

    バックトラック 問題を解決するためのアルゴリズムに基づく手法です。再帰呼び出しを使用して、時間の経過とともに値を段階的に増やしながらソリューションを構築することにより、ソリューションを見つけます。問題を解決するために与えられた制約に基づいて、問題の解決をもたらさない解決策を削除します。 バックトラッキングアルゴリズムは、特定の種類の問題に適用されます。 問題の実行可能な解決策を見つけるために使用される決定問題。 適用できる最良の解決策を見つけるために使用される最適化問題。 問題のすべての実行可能な解決策のセットを見つけるために使用される列挙問題。 バックトラッキング問

  2. Cの配列内の範囲の積

    配列、L、R、Pを入力として指定し、タスクは、モジュロの下の積を出力としてLとRの間の範囲を見つけ、それを表示することです。 図に示されているように、要素の配列と、2としての左の値であるLと2としての右の値であるRがあります。ここで、プログラムはそれらの間の範囲の積を見つける必要があります。 例 Input-:  A[] = { 1, 2, 3, 4, 5, 6 }    P = 29  L = 2 R = 6 Output-: 24 Input-: A[] = {1, 2, 3, 4, 5, 6},    L =