生成前N个自然数的一个随机置换(3个算法)

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

int RandInt(int a, int b);

int main()
{
    int N;
    int i;
    int ii;
    int a;
    int b;
    int duplicates = 0; //判断是否重复
    int *A = NULL;
    
    printf("Input the value of i: ");
    scanf("%d", &a);
    printf("\nInput the value of j: ");
    scanf("%d", &b);
    printf("\nInput the value of N: ");
    scanf("%d", &N);
    A = (int *)malloc(sizeof(int) * N);
    for (i = 0; i < N; i++)
    {
        if (i == 0)
        {
            A[i] = RandInt(a, b);
            continue;
        }
        else
        {
            while ((A[i] = RandInt(a, b)), !duplicates) // 有重复while循环
            {
                for (ii = i - 1; ii >= 0; ii--)
                {
                    if (A[ii] == A[i])
                        break; //有重复
                }
                if(ii < 0)
                    break; //全部检查完就跳出循环
            }
        }
    }

    for (i = 0; i < N; i++)
        printf("%d ", A[i]);
    return 0;
}

int RandInt(int a, int b)
{
    int c;
    srand((unsigned)time(NULL));
    c = a + rand() % (b - a + 1);
    return c;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int RandInt(int a, int b);

int main()
{
    int N;
    int i;
    int a;
    int b;
    int *A = NULL;
    int *used = NULL; // Used[A[i]]=1表示该值最初已经存入A

    printf("Input the value of i: ");
    scanf("%d", &a);
    printf("\nInput the value of j: ");
    scanf("%d", &b);
    printf("\nInput the value of N: ");
    scanf("%d", &N);
    A = (int *)malloc(sizeof(int) * N);
    used = (int *)malloc(sizeof(int) * N);
    for (i = 0; i < N; i++)
    {
        if (i == 0)
        {
            A[i] = RandInt(a, b);
            used[A[i]] = 1;
            continue;
        }
        else
        {
            // 有重复while循环
            while ((A[i] = RandInt(a, b)), used[A[i]] == 1); 
            used[A[i]] = 1;
        }
    }

    for (i = 0; i < N; i++)
        printf("%d ", A[i]);
    return 0;
}

int RandInt(int a, int b)
{
    int c;
    srand((unsigned)time(NULL));
    c = a + rand() % (b - a + 1);
    return c;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void Swap(int *a, int *b);
int RandInt(int i, int j);

int main()
{
    int i;
    int N;
    int *A = NULL;

    printf("\nInput the value of N: ");
    scanf("%d", &N);
    A = (int *)malloc(sizeof(int) * N);
    for (i = 0; i < N; i++)
        A[i] = i + 1;

    for (i = 1; i < N; i++)
        Swap(&A[i], &A[RandInt(0, i)]);
    
    for(i = 0; i < N; i++)
        printf("%d ", A[i]);
    return 0;
}

void Swap(int *a, int *b)
{
    int temp;

    temp = *a;
    *a = *b;
    *b = temp;
}

int RandInt(int i, int j)
{
    int a;
    srand((unsigned)time(NULL));
    a = i + rand() % (j - i + 1);
    return a;
}

发布了40 篇原创文章 · 获赞 7 · 访问量 1060

猜你喜欢

转载自blog.csdn.net/BobDay/article/details/104677759