我想实现对数组由大到小排序,请问我的代码哪里出现了问题?
一道C学习的题,实现排序。#include <stdio.h>
#include <time.h>
void bogo_sort(int, int);
void bogo_sort(int array[], int length)
{
array = 1;
printf("%d\n",array);
while(1){
int count = 0;
for(int j = length; j>0; j--){
int i = 0;
if(array>array){
int temp = array;
array = array;
array = temp;
count++;
}
i++;
}
if(0 == count){
break;
}
}
}
int main(void)
{
int array[] = {73, 108, 111, 118, 101, 70, 105, 104, 67};
int i, length;
time_t begin, end;
begin = time(NULL);
length = sizeof(array) / sizeof(array);
bogo_sort(array, length);
printf("%d\n",array);
printf("排序后的结果是:");
for (i = 0; i < length; i++)
{
printf("%d ", array);
}
putchar('\n');
end = time(NULL);
printf("总共耗时:%ld秒\n", end - begin);
return 0;
} 本帖最后由 zzzyl 于 2022-1-23 16:25 编辑
你把 int i = 0;放在了for循环中,每次for循环i重置为0,相当于这个程序一直都在交换前两个数据,所以最后排序出问题。
你这里面还有一个问题,在这题里数组的下标最大为8,而for循环最后一次循环中数组下标出现了9,可能会导致程序出错。 题目说错了,是由小到大。
运行结果都是这样的
猴子排序法为何没有用随机?{:5_94:} 傻眼貓咪 发表于 2022-1-22 17:20
猴子排序法为何没有用随机?
因为我不会 #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;
arr = arr;
arr = temp;
/*
除非每次打印排序结果(花时间),否则很快执行完毕
for(int i = 0; i < n; i++)
printf("%d ", arr);
printf("\n");
*/
}
int isSorted(int arr[], size_t n) // 检查数组是否全部已经排序(由小至大)
{
for(int i = 0; i < n-1; i++) if(arr > arr) 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);
printf("\n%ld sec", end-begin);
return 0;
} #include <stdio.h>
#include <time.h>
void bogo_sort(int arra[], int length)
{
//arra = 1;//这是啥意思,不懂
printf("%d\n",arra);
/*while(1){
int count = 0;
for(int j = length; j>0; j--){
int i = 0;
if(array>array){
int temp = array;
array = array;
array = temp;
count++;
}
i++;
}
if(0 == count){
break;
}
}*/
int temp=0;
for(int i=0;i<length-1;i++)
{
for(int j=i+1;j<=length-1;j++)
if(arra>arra)
{
temp = arra;
arra = arra;
arra = temp;
}
}
}
int main(void)
{
int arra[] = {73, 108, 111, 118, 101, 70, 105, 104, 67};
int i, length;
time_t begin, end;
begin = time(NULL);
length = sizeof(arra) / sizeof(arra);
bogo_sort(arra, length);
printf("%d\n",arra);
printf("排序后的结果是:");
for (i = 0; i < length; i++)
{
printf("%d ", arra);
}
putchar('\n');
end = time(NULL);
printf("总共耗时:%ld秒\n", end - begin);
return 0;
} 傻眼貓咪 发表于 2022-1-22 17:50
我没有问猴子排序法,就是说我不是想做这道题。我只想知道我这个为什么出不来排序结果。你给我把他答案复制下来干嘛,我不会自己看啊。 YSW9527 发表于 2022-1-22 23:19
#include
#include
那是我当时想知道是不是在另一个函数里不能改数组。忘了删掉抱歉{:5_109:} 傻眼貓咪 发表于 2022-1-22 17:50
对不起,我看了一下他的,你没复制他的。但我不是想知道原题怎么做,因为我看不懂,我就想知道我哪出问题了。 豆芽菜丶 发表于 2022-1-23 14:54
我没有问猴子排序法,就是说我不是想做这道题。我只想知道我这个为什么出不来排序结果。你给我把他答案复 ...
兄弟
1.)我只是好奇你的题目明显写着 bogo_sort 就是猴子排序法,多问了一句为什么没有用随机这样也有错?
2.)你想不想做不用告诉我,我只是出于好心,因为你说你不会,我就完全自己写了代码让你参考,谢谢也没有,反而怪我?(我根本不知道你的题目从哪来,怎样复制?这么简单的题目根本不用复制啊,朋友!)
3.)你说不想别人复制答案,自己会看。那么你自己的发帖发问的问题又不清楚,别人怎么清楚知道你想问什么?(别人是你肚子里的虫哦?)
算了,兄弟,你也不用再回复我了。
如果兄弟你觉得你很强,很厉害了,在此非常抱歉,我没有能力帮助你。加油吧兄弟~ 傻眼貓咪 发表于 2022-1-23 15:14
兄弟
1.)我只是好奇你的题目明显写着 bogo_sort 就是猴子排序法,多问了一句为什么没有用随机这样也有 ...
恶心人你也真是有有一手,我就是个菜逼,你也不用回复我了。 zzzyl 发表于 2022-1-22 17:02
你把 int i = 0;放在了for循环中,每次for循环i重置为0,相当于这个程序一直都在交换前两个数据,所以最后 ...
感谢老哥,我解决了。
页:
[1]