#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void bogosort(int *arr, size_t n) // 随机排序
{
// random[a, b) = (rand() % (b-a))+ a; 随机 a 至 b 区间(包括 a 但不包括 b)
int a, b = 0;
a = rand()%(n);
do{
b = rand()%(n);
}while(b == a);
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
/*
除非每次打印排序结果(花时间),否则很快执行完毕
for(int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
*/
}
int isSorted(int arr[], size_t n) // 检查数组是否全部已经排序(由小至大)
{
for(int i = 0; i < n-1; i++) if(arr[i] > arr[i+1]) return 0; // 未完成排序
return 1; // 已完成排序
}
int main()
{
srand((unsigned)time(NULL)); // 随机种子
int arr[] = {73, 108, 111, 118, 101, 70, 105, 104, 67}, n = sizeof(arr)/sizeof(int);
time_t begin, end;
begin = time(NULL);
while(!isSorted(arr, n)) // 当未完成排序时
{
bogosort(arr, n); // 重复随机排序
}
end = time(NULL);
for(int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n%ld sec", end-begin);
return 0;
}