c++学习连载—随机排序

来源:互联网 发布:网络推广优化三尾狐 编辑:程序博客网 时间:2024/06/05 10:21

首先介绍下产生随机数的程序:

#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define MAX 10
int main()
{
    int number[MAX]={0};
    int i;
    srand(unsigned(time(NULL)));
    for(i=0;i<MAX;i++)
    {
        number[i]=rand()%100;
        printf("%d  ",number[i]);
    }
    printf("\n");
    return 0;
}

 srand(unsigned(time(NULL)));用来产生随机数需要的种子

如果没有这句代码,那么程序每次运行获得的随机数序列将相同

number[i]=rand()%100;产生0~99之间的随机数

下面是我写的产生(a,b)之间随机整数的程序,感兴趣的可以用算法

知识证明程序的正确性

#include<stdlib.h>
#include<stdio.h>
#include<time.h>
int randomgenator(int num_min,int num_max)
{
    srand(unsigned(time(NULL)));
    return rand()%(num_max-num_min)+num_min;
}

下面是获得数组大小的程序:

#include <iostream>

using namespace std;

template <class T>

int getArrayLen(T& array)

{//使用模板定义一个函数getArrayLen,该函数将返回数组array的长度

return (sizeof(array) / sizeof(array[0]));

}

下面是对于给定的序列给出一个随机排序的整个程序

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

using namespace std;
int randomgenator(int num_min,int num_max)
{
    //srand(unsigned(time(NULL)));
    return rand()%(num_max-num_min)+num_min;
}
template <class T>

int getArrayLen(T& array)

{//使用模板定义一个函数getArrayLen,该函数将返回数组array的长度

return (sizeof(array) / sizeof(array[0]));

}
template <class T>
void randomize_in_place(T& arry)
{
    int len=getArrayLen(arry);
    int tem;
    int tem_index;
    srand(unsigned(time(NULL)));
    for(int i=0;i<len;i++)
    {
        tem_index=randomgenator(i,len);
        tem=arry[i];
        arry[i]=arry[tem_index];
        arry[tem_index]=tem;
    }
}

int main()
{
    int A[10]={1,2,3,4,5,6,7,8,9,10};
    int i=0;
    for(;i<10;i++)
    {
        cout<<A[i]<<" ";
    }
    cout<<endl;
    randomize_in_place(A);
    i=0;
    for(;i<10;i++)
    {
        cout<<A[i]<<" ";
    }
    cout<<endl;
    return 0;
}

一下是程序运行结果: