C++ 中的圓形排序


圓形排序是一種有趣的排序演算法,用於對給定的元素陣列進行排序。該演算法對稱比較陣列的元素,並且一旦對一個部分中的元素進行排序,就會不斷對稱排序陣列另一端的元素。

示例

讓我們視覺化陣列的圓形排序。假設我們有一個包含 6 個元素的陣列。

輸入

N = 6

arr [ ] = { 2, 1, 5, 8, 7, 9 }

當我們為每個陣列元素繪製同心圓時,將顯示如下

輸出

1 2 5 7 8 9

說明:使用圓形排序對陣列中的元素排序後,將為 1、2、5、7、8、9。

圓形排序演算法

  • 將陣列的第一個元素與最後一個元素進行比較,將第二個元素與陣列的倒數第二個元素進行比較。
  • 現在將陣列分成兩半,然後再次使用圓形排序將前半部分的第一個元素與它的末尾元素進行比較。
  • 遞迴呼叫步驟 1 和步驟 2,直到陣列變得有序。

實現圓形排序的 C++ 程式

示例

線上演示

#include <bits/stdc++.h>
using namespace std;
bool circle_sort_rec(int * arr, int n) {
   bool swaped = false;
   if (n <= 2) {
      if (arr[0] > arr[n - 1]) {
         swap(arr[0], arr[n - 1]);
         swaped = true;
      }
      return swaped;
   }
   int mid = (n + 1) / 2;
   for (int i = 0; i < mid; i++) {
      if (i == n - i - 1) {
         if (arr[i] > arr[i + 1]) {
            swap(arr[i], arr[i + 1]);
            swaped = true;
         }
      } else {
         if (arr[i] > arr[n - i - 1]) {
            swap(arr[i], arr[n - i - 1]);
            swaped = true;
         }
      }
   }
   if (circle_sort_rec(arr, mid))
      swaped = true;
   if (circle_sort_rec(arr + mid, n - mid))
      swaped = true;
   return swaped;
}

void circle_sort(int * arr, int size) {
   while (circle_sort_rec(arr, size)) {
      ;
   }
   return;
}

int main() {
   int size = 5;
   int arr[size] = {2,1,7,4,5,9};
   circle_sort(arr, size);
   for (int i = 0; i < size; i++)
      cout << arr[i] << " ";
   return 0;
}

輸出

1 2 4 5 7

更新於:2021 年 2 月 23 日

302 次觀看

開啟您的事業

完成課程即可獲得認證

開始吧
廣告
© . All rights reserved.