首頁 > 後端開發 > C++ > 主體

煎餅排序的C程序?

WBOY
發布: 2023-08-31 17:21:04
轉載
1062 人瀏覽過

煎餅排序的C程序?

此 C 程式在整數陣列上實作煎餅排序。

煎餅排序是排序問題的變體,其中唯一允許的操作是反轉序列中某些前綴的元素。

煎餅排序是排序問題的變體,其中唯一允許的操作是反轉序列中某些前綴的元素。 p>

煎餅排序是一個通俗術語,指的是一個數學問題,即在一堆無序的煎餅中按大小順序排序,此時可以將抹刀插入煎餅堆中的任意點並用於翻轉所有煎餅上面有煎餅。煎餅數是給定數量的煎餅所需的最少翻轉次數

Input:5,3,2,1,4
Output:1 2 3 4 5
登入後複製

解釋

這是排序問題的變體,其中唯一允許的操作是反轉序列中某個前綴的元素。與嘗試以盡可能少的比較進行排序的傳統排序演算法不同,其目標是以盡可能少的反轉對序列進行排序。該問題的一個變體與燒焦的煎餅有關,其中每個煎餅都有燒焦的一面,並且所有煎餅最終都必須將燒焦的一面放在底部。

範例

#include <iostream>
using namespace std;
void do_flip(int *, int, int);
int pancake_sort(int *list, unsigned int length) {
   if (length < 2)
      return 0;
   int i, a, max_num_pos, moves;
   moves = 0;
   for (i = length;i > 1;i--) {
      max_num_pos = 0;
      for (a = 0;a < i;a++){
         if (list[a] > list[max_num_pos])
            max_num_pos = a;
      }
      if (max_num_pos == i - 1)
         continue;
      if (max_num_pos){
         moves++;
         do_flip(list, length, max_num_pos + 1);
      }
      do_flip(list, length, i);
   }
   return moves;
}
void do_flip(int *list, int length, int num) {
   int swap;
   int i = 0;
   for (i=0;i < --num;i++) {
      swap = list[i];
      list[i] = list[num];
      list[num] = swap;
   }
}
int main(int argc, char **argv) {
   int arr[]={5,3,2,1,4};
   int n=5;
   int moves=pancake_sort(arr, n);
   for (int i = 0;i < n;i++) {
      printf("%d ", arr[i]);
   }
   printf(" - with a total of %d moves</p><p>", moves);
}
登入後複製
#

以上是煎餅排序的C程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板