用C语言写一个猴子排序算法
时间: 2023-12-29 19:47:09 浏览: 189
以下是使用C语言编写猴子排序算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 判断数组是否已经有序
int is_sorted(int arr[], int size) {
int i;
for (i = 1; i < size; i++) {
if (arr[i] < arr[i - 1]) {
return 0;
}
}
return 1;
}
// 随机交换数组中的两个元素
void shuffle(int arr[], int size) {
int i, j, temp;
for (i = 0; i < size; i++) {
j = rand() % size;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 猴子排序算法
void monkey_sort(int arr[], int size) {
while (!is_sorted(arr, size)) {
shuffle(arr, size);
}
}
// 输出数组元素
void print_array(int arr[], int size) {
int i;
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {2, 6, 3, 8, 1, 9, 4, 7, 5};
int size = sizeof(arr) / sizeof(arr[0]);
srand((unsigned int) time(NULL)); // 设置随机数种子
printf("排序前:");
print_array(arr, size);
monkey_sort(arr, size);
printf("排序后:");
print_array(arr, size);
return 0;
}
```
在这个示例代码中,我们首先定义了一个 `is_sorted` 函数来判断数组是否已经有序,这个函数会遍历整个数组,如果发现有任意一个元素比其前面的元素小,就说明数组还没有排好序。
然后我们定义了一个 `shuffle` 函数来随机交换数组中的两个元素。这个函数使用了 `rand()` 函数来生成一个随机数,然后将其作为下标来交换数组中的两个元素。
最后,我们定义了 `monkey_sort` 函数来实现猴子排序算法。这个函数会不断调用 `shuffle` 函数,直到数组已经排好序为止。
在 `main` 函数中,我们首先打印出原始的数组,然后调用 `monkey_sort` 函数来对数组进行排序,最后再次打印出排序后的数组。
阅读全文