|
发表于 2022-1-22 17:50:18
|
显示全部楼层
- #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;
- }
复制代码 |
|