鱼C论坛

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

[已解决]猴子排序求助

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

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

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

x
本帖最后由 csilovelxl 于 2018-12-19 22:02 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>


  4. //排序的结果不正确,求助
  5. void bogo_sort(int array[],int length)
  6. {
  7.         int i,k=0;
  8.         int index;
  9.        

  10.         int temp=0;
  11.        
  12.         srand(time(NULL));
  13.        
  14.        
  15.    do{
  16.           
  17.           
  18.        
  19.         //随机排序
  20.              for(i=0;i<length;i++)
  21.               {
  22.              index=rand() %(length-i)+i;
  23.                      if(i!= index)
  24.                      {
  25.                          temp = array[i];
  26.                           array[i]=array[index];
  27.                              array[index]=temp;
  28.                    }
  29.           
  30.            }
  31.           
  32.           //如果前面的元素比后面小,就检查再下一对,用K记数
  33.      while(array[k] <= array[k+1] && k<length-1)
  34.      {
  35.             ++k;
  36.                     printf("go\n");
  37.             
  38.      }
  39.          

  40.        
  41.          //如果K成功达到8,说明排序成功,如果不是8,重新排序
  42.     }while(k != length-1);
  43.    
  44.    
  45.    
  46.    
  47.    
  48.    
  49. }





  50. int main(void)
  51. {
  52.         int array[] = {73, 108, 111, 118, 101, 70, 105, 104, 67};
  53.         int i, length;
  54.         time_t begin, end;

  55.         begin = time(NULL);
  56.           printf("继续进行5\n");

  57.         length = sizeof(array) / sizeof(array[0]);
  58.         bogo_sort(array, length);

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

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

  67.         return 0;
  68. }
复制代码
最佳答案
2018-12-19 22:19:16
在do {}while语句里面的开头加上一句,k = 0;
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-19 22:19:16 | 显示全部楼层    本楼为最佳答案   
在do {}while语句里面的开头加上一句,k = 0;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-19 22:30:11 | 显示全部楼层
K我在前面定义过,没必要在里面定义吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-19 22:30:44 | 显示全部楼层
而且还是循环不出结果来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-19 22:37:06 | 显示全部楼层
你第一次do循环的时候,没有排序好,k的值不重新清零,下一次循环k再继续增加,几次循环后k的值就等于lenght-1了
小甲鱼最新课程 -> https://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);
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

运行了一下,结果不对,一直循环go,,,,,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 00:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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