ここでは、パンケーキ ソートと呼ばれる別のソート問題を見ていきます。質問は簡単です。配列があります。これを整理しなければなりません。ただし、使用できる操作は rev(arr, i) という 1 つだけです。これにより、arr の要素が 0 から i 番目の位置に反転されます。
このアイデアは選択ソートに似ています。配列のサイズを減らすために、最大の要素を繰り返し最後に配置します。この考え方を理解するためにアルゴリズムを見てみましょう。
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
以上がパンケーキの注文に関する質問ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。