c++學習連載—隨機排序

首先介紹下產生隨機數的程序:

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

一下是程序運行結果:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章