csilovelxl 发表于 2018-12-19 21:56:21

猴子排序求助

本帖最后由 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;
}

rencaixiaomeng 发表于 2018-12-19 22:19:16

在do {}while语句里面的开头加上一句,k = 0;

csilovelxl 发表于 2018-12-19 22:30:11

K我在前面定义过,没必要在里面定义吧

csilovelxl 发表于 2018-12-19 22:30:44

而且还是循环不出结果来

rencaixiaomeng 发表于 2018-12-19 22:37:06

你第一次do循环的时候,没有排序好,k的值不重新清零,下一次循环k再继续增加,几次循环后k的值就等于lenght-1了

rencaixiaomeng 发表于 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;
                        array=array;
                           array=temp;
                   }
         
         }
         
          //如果前面的元素比后面小,就检查再下一对,用K记数
   while(array <= array && k<length-1)
   {
            ++k;
                  printf("go\n");
            
   }
         

      
         //如果K成功达到8,说明排序成功,如果不是8,重新排序
    }while(k != length-1);

小脑斧 发表于 2019-7-2 09:51:57

rencaixiaomeng 发表于 2018-12-19 22:37
do{
         
         k=0;//这里加上这一句,这里加上这一句,这里加上这一句


运行了一下,结果不对,一直循环go,,,,,
页: [1]
查看完整版本: 猴子排序求助