📜  BogoSort或置换排序的C ++程序(1)

📅  最后修改于: 2023-12-03 14:59:32.146000             🧑  作者: Mango

BogoSort或置换排序的C ++程序

简介

BogoSort,也称为Permutation Sort,是一种非常低效的排序算法。它的工作原理是不断地随机打乱列表,直到它按照升序排列。它的时间复杂度为O(n * n!),因此只在教学用途中使用。

置换排序是一种高效的排序算法,也称为快速排序。它的工作原理是通过分区和递归来快速排序元素。它的时间复杂度为O(n log n)。它是最常用的排序算法之一。

BogoSort

以下是BogoSort的C ++实现。

#include <iostream>
#include <algorithm>
#include <random>

// 判断列表是否按升序排序
bool is_sorted(int* arr, int n) {
   for(int i = 0; i < n - 1; i++)
      if(arr[i] > arr[i+1])
         return false;
   return true;
}

// 随机打乱列表
void shuffle(int* arr, int n) {
   std::random_device rd;
   std::mt19937 g(rd());
   std::shuffle(arr, arr+n, g);
}

// Bogo Sort算法
void bogo_sort(int* arr, int n) {
   while(!is_sorted(arr, n))
      shuffle(arr, n);
}

// 测试
int main() {
   int arr[] = {3, 6, 1, 8, 4, 2, 9, 5, 7};
   int n = sizeof(arr) / sizeof(arr[0]);
   bogo_sort(arr, n);
   for(int i = 0; i < n; i++)
      std::cout << arr[i] << " ";
   std::cout << std::endl;
   return 0;
}
置换排序

以下是置换排序的C ++实现。

#include <iostream>
#include <algorithm>

// 划分和排序列表
int partition(int* arr, int left, int right) {
   int pivot = arr[right];
   int i = left - 1;
   for(int j = left; j < right; j++) {
      if(arr[j] < pivot) {
         i++;
         std::swap(arr[i], arr[j]);
      }
   }
   std::swap(arr[i+1], arr[right]);
   return i+1;
}

// 递归排序左右子列表
void quick_sort(int* arr, int left, int right) {
   if(left < right) {
      int pi = partition(arr, left, right);
      quick_sort(arr, left, pi-1);
      quick_sort(arr, pi+1, right);
   }
}

// 排序算法
void sort(int* arr, int n) {
   quick_sort(arr, 0, n-1);
}

// 测试
int main() {
   int arr[] = {3, 6, 1, 8, 4, 2, 9, 5, 7};
   int n = sizeof(arr) / sizeof(arr[0]);
   sort(arr, n);
   for(int i = 0; i < n; i++)
      std::cout << arr[i] << " ";
   std::cout << std::endl;
   return 0;
}
结论

BogoSort是一种非常低效的排序算法,不适用于实际应用。置换排序是一种高效的排序算法,适用于实际应用。在实际应用中,我们应该始终使用高效的排序算法。

以上就是BogoSort和置换排序的C ++实现。