最近学到了C语言中的排序算法。

猴子算法

第一个学到的算法叫猴子算法

其中用两种写法实现了猴子算法,一种是自己编写,一种是出题者提供的解法,但我写的猴子耗时一般在五秒以内,而提供的猴子我竟然尝试了451秒
猴子算法.png

下面贴上两种代码:
第一种是我写的:

#include<stdio.h>
#include<stdlib.h>
#include <time.h>
void bogo_sort(int *,int);
void bogo_sort(int *array,int length)
{
    int x;
    int n1,n2,i,temp; 
    srand(time(NULL));//随机数种子
    for(x=0;;x++)
    {
    
        //交换
    
        for(i=0;i<100;i++)
        {
        
            int i3;

                n1=rand()%9;
                n2=rand()%9;

            temp=*(array+n1);
            *(array+n1)=*(array+n2);
            *(array+n2)=temp;
        }
    
        //检验是否正确:
        int i2;
        for(i2=0;i2<=length-1;i2++)
        {
            if(*(array+i2)>*(array+i2+1))
            break;
        }
        

            if(i2==length-1)
            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[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;
}

第二种是出题者提供的:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int in_order(int array[], int length);
void shuffle(int array[], int length);
void bogo_sort(int array[], int length);

int in_order(int array[], int length)
{
        int i = 0;

        while (array[i] <= array[i+1] && ++i < length - 1)
                ;

        if (i == length - 1)
        {
                return 1;
        }
        else
        {
                return 0;
        }
}

void shuffle(int array[], int length)
{
        int index, temp, i;
        static int t1, t2;

        srand(t1);
        t1 = rand();

        t2 = time(NULL);
        srand(t1+t2);

        for (i = 0; i < length; i++)
        {
                index = rand() % (length - i) + i;
                if (index != i)
                {
                        temp = array[i];
                        array[i] = array[index];
                        array[index] = temp;
                }
        }
}

void bogo_sort(int array[], int length)
{
        while (!in_order(array, length))
        {
                shuffle(array, length);
        }
}

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[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;
}
最后修改:2021 年 10 月 09 日
如果觉得我的文章对你有用,请随意赞赏