📅  最后修改于: 2023-12-03 14:59:32.146000             🧑  作者: Mango
BogoSort,也称为Permutation Sort,是一种非常低效的排序算法。它的工作原理是不断地随机打乱列表,直到它按照升序排列。它的时间复杂度为O(n * n!),因此只在教学用途中使用。
置换排序是一种高效的排序算法,也称为快速排序。它的工作原理是通过分区和递归来快速排序元素。它的时间复杂度为O(n log n)。它是最常用的排序算法之一。
以下是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 ++实现。