豆芽菜丶 发表于 2022-1-22 17:02:39

我想实现对数组由大到小排序,请问我的代码哪里出现了问题?

一道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-22 17:02:40

本帖最后由 zzzyl 于 2022-1-23 16:25 编辑

你把 int i = 0;放在了for循环中,每次for循环i重置为0,相当于这个程序一直都在交换前两个数据,所以最后排序出问题。

你这里面还有一个问题,在这题里数组的下标最大为8,而for循环最后一次循环中数组下标出现了9,可能会导致程序出错。

豆芽菜丶 发表于 2022-1-22 17:05:25

题目说错了,是由小到大。
运行结果都是这样的

傻眼貓咪 发表于 2022-1-22 17:20:04

猴子排序法为何没有用随机?{:5_94:}

豆芽菜丶 发表于 2022-1-22 17:21:40

傻眼貓咪 发表于 2022-1-22 17:20
猴子排序法为何没有用随机?

因为我不会

傻眼貓咪 发表于 2022-1-22 17:50:18

#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;
}

YSW9527 发表于 2022-1-22 23:19:24

#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-23 14:54:41

傻眼貓咪 发表于 2022-1-22 17:50


我没有问猴子排序法,就是说我不是想做这道题。我只想知道我这个为什么出不来排序结果。你给我把他答案复制下来干嘛,我不会自己看啊。

豆芽菜丶 发表于 2022-1-23 14:56:34

YSW9527 发表于 2022-1-22 23:19
#include
#include



那是我当时想知道是不是在另一个函数里不能改数组。忘了删掉抱歉{:5_109:}

豆芽菜丶 发表于 2022-1-23 15:04:06

傻眼貓咪 发表于 2022-1-22 17:50


对不起,我看了一下他的,你没复制他的。但我不是想知道原题怎么做,因为我看不懂,我就想知道我哪出问题了。

傻眼貓咪 发表于 2022-1-23 15:14:34

豆芽菜丶 发表于 2022-1-23 14:54
我没有问猴子排序法,就是说我不是想做这道题。我只想知道我这个为什么出不来排序结果。你给我把他答案复 ...

兄弟
1.)我只是好奇你的题目明显写着 bogo_sort 就是猴子排序法,多问了一句为什么没有用随机这样也有错?
2.)你想不想做不用告诉我,我只是出于好心,因为你说你不会,我就完全自己写了代码让你参考,谢谢也没有,反而怪我?(我根本不知道你的题目从哪来,怎样复制?这么简单的题目根本不用复制啊,朋友!)
3.)你说不想别人复制答案,自己会看。那么你自己的发帖发问的问题又不清楚,别人怎么清楚知道你想问什么?(别人是你肚子里的虫哦?)

算了,兄弟,你也不用再回复我了。
如果兄弟你觉得你很强,很厉害了,在此非常抱歉,我没有能力帮助你。加油吧兄弟~

豆芽菜丶 发表于 2022-1-23 15:25:36

傻眼貓咪 发表于 2022-1-23 15:14
兄弟
1.)我只是好奇你的题目明显写着 bogo_sort 就是猴子排序法,多问了一句为什么没有用随机这样也有 ...

恶心人你也真是有有一手,我就是个菜逼,你也不用回复我了。

豆芽菜丶 发表于 2022-1-24 15:48:38

zzzyl 发表于 2022-1-22 17:02
你把 int i = 0;放在了for循环中,每次for循环i重置为0,相当于这个程序一直都在交换前两个数据,所以最后 ...

感谢老哥,我解决了。
页: [1]
查看完整版本: 我想实现对数组由大到小排序,请问我的代码哪里出现了问题?