鱼C论坛

 找回密码
 立即注册
查看: 1329|回复: 6

[已解决]猴子排序求助

[复制链接]
发表于 2018-12-19 21:56:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[i];
                          array[i]=array[index];
                             array[index]=temp;
                   }
           
           }
          
          //如果前面的元素比后面小,就检查再下一对,用K记数
     while(array[k] <= array[k+1] && 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[0]);
        bogo_sort(array, length);

        printf("排序后的结果是:");
        for (i = 0; i < length; i++)
        {
                printf("%d ", array[i]);
        }
        putchar('\n');

        end = time(NULL);
        printf("总共耗时:%ld秒\n", end - begin);

        return 0;
}
最佳答案
2018-12-19 22:19:16
在do {}while语句里面的开头加上一句,k = 0;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-19 22:19:16 | 显示全部楼层    本楼为最佳答案   
在do {}while语句里面的开头加上一句,k = 0;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-19 22:30:11 | 显示全部楼层
K我在前面定义过,没必要在里面定义吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-19 22:30:44 | 显示全部楼层
而且还是循环不出结果来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-19 22:37:06 | 显示全部楼层
你第一次do循环的时候,没有排序好,k的值不重新清零,下一次循环k再继续增加,几次循环后k的值就等于lenght-1了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-19 22:37:43 | 显示全部楼层
do{
           
           k=0;//这里加上这一句,这里加上这一句,这里加上这一句
        
        //随机排序
             for(i=0;i<length;i++)
              {
             index=rand() %(length-i)+i;
                     if(i!= index)
                     {
                         temp = array[i];
                          array[i]=array[index];
                             array[index]=temp;
                   }
           
           }
         
          //如果前面的元素比后面小,就检查再下一对,用K记数
     while(array[k] <= array[k+1] && k<length-1)
     {
            ++k;
                    printf("go\n");
            
     }
         

        
         //如果K成功达到8,说明排序成功,如果不是8,重新排序
    }while(k != length-1);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-2 09:51:57 | 显示全部楼层
rencaixiaomeng 发表于 2018-12-19 22:37
do{
           
           k=0;//这里加上这一句,这里加上这一句,这里加上这一句

运行了一下,结果不对,一直循环go,,,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 23:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表