猴子排序求助
本帖最后由 csilovelxl 于 2018-12-19 22:02 编辑#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//排序的结果不正确,求助
void bogo_sort(int array[],int length)
{
int i,k=0;
int index;
int temp=0;
srand(time(NULL));
do{
//随机排序
for(i=0;i<length;i++)
{
index=rand() %(length-i)+i;
if(i!= index)
{
temp = array;
array=array;
array=temp;
}
}
//如果前面的元素比后面小,就检查再下一对,用K记数
while(array <= array && k<length-1)
{
++k;
printf("go\n");
}
//如果K成功达到8,说明排序成功,如果不是8,重新排序
}while(k != length-1);
}
int main(void)
{
int array[] = {73, 108, 111, 118, 101, 70, 105, 104, 67};
int i, length;
time_t begin, end;
begin = time(NULL);
printf("继续进行5\n");
length = sizeof(array) / sizeof(array);
bogo_sort(array, length);
printf("排序后的结果是:");
for (i = 0; i < length; i++)
{
printf("%d ", array);
}
putchar('\n');
end = time(NULL);
printf("总共耗时:%ld秒\n", end - begin);
return 0;
} 在do {}while语句里面的开头加上一句,k = 0; K我在前面定义过,没必要在里面定义吧 而且还是循环不出结果来 你第一次do循环的时候,没有排序好,k的值不重新清零,下一次循环k再继续增加,几次循环后k的值就等于lenght-1了 do{
k=0;//这里加上这一句,这里加上这一句,这里加上这一句
//随机排序
for(i=0;i<length;i++)
{
index=rand() %(length-i)+i;
if(i!= index)
{
temp = array;
array=array;
array=temp;
}
}
//如果前面的元素比后面小,就检查再下一对,用K记数
while(array <= array && k<length-1)
{
++k;
printf("go\n");
}
//如果K成功达到8,说明排序成功,如果不是8,重新排序
}while(k != length-1); rencaixiaomeng 发表于 2018-12-19 22:37
do{
k=0;//这里加上这一句,这里加上这一句,这里加上这一句
运行了一下,结果不对,一直循环go,,,,,
页:
[1]