srand()与rand()的应用

孤街浪徒 提交于 2019-12-02 03:17:51
  1 #include<stdio.h>                                                                                                                                                                                                                                                                                                         
  2 #include<time.h>
  3 #include<stdlib.h>
  4 void bubbleSort(int arr[],int arrSize){
  5         int tmp = 0;
  6         int swap = 1;
  7         while(swap){
  8                 swap = 0;
  9                 for(int i = 0;i < (arrSize -1);i++){
 10                         if(arr[i] > arr[i + 1]){
 11                                 tmp = arr[i];
 12                                 arr[i] = arr[i + 1];
 13                                 arr[i + 1] = tmp;
 14                                 swap = 1;
 15                         }
 16                 }
 17         }
 18    
 19         return;
 20 }  
 21    
 22 void outArr(char* name, char* time,int arr[],int arrSize){
 23         printf("%s %s is: \n",name,time);
 24         for(int i = 0;i < arrSize;i++){
 25                 printf("%d\t",arr[i]);
 26         }
 27         printf("\n");
 28         return;
 29 }  
 30    
 31    
 32 void insertSort(int arr[],int arrSize){
 33         for(int i = 1;i < arrSize;i++){
 34                 if(arr[i] < arr[i - 1]){
 35                         int j = 0;
 36                         int tmp = arr[i];
 37                         for(j = i - 1; j >= 0 && tmp < arr[j];j--){
 38                                 arr[j + 1] = arr[j];
 39                         }
 40                         arr[j + 1] =tmp;
 41                 }
 42         }
 43         return;
 44 }  
 45    
 46    
 47 void binaryInsertSort(int arr[],int arrSize){
 48         int tmp = 0;
 49         int i = 0;
 50         int j = 0;
 51         int low = 0;
 52         int high = 0;
 53         for(i = 0;i < arrSize;i++){
 54                 tmp = arr[i];
 55                 low = 0;
 56                 high = i - 1;
 57                 while(low <= high){
 58                         int mid = (low + high)/2;
 59                         if(tmp < arr[mid]){
 60                                 high = high - 1;
 61                         }
 62                         else{
 63                                 low = low + 1;
 64                         }
 65                 }
 66                 for(j = i - 1;j >= low;j--){
 67                         arr[j + 1] = arr[j];
 68                 }
 69                 arr[low] = tmp;
 70         }
 71         return;
 72 }  
 73    
 74    
 75 void selectSort(int arr[],int arrSize){
 76         for(int i = 0;i < arrSize;i++){
 77                 int index = i;
 78                 for(int j = i + 1;j < arrSize;j++){
 79                         if(arr[j] < arr[index]){
 80                                 index = j;
 81                         }
 82                 }
 83                 if(index != i){
 84                         int tmp = arr[index];
 85                         arr[index] = arr[i];
 86                         arr[i] = tmp;
 87                 }
 88         }
 89         return;
 90 }  
 91    
 92    
 93    
 94 int partition(int arr[], int low, int high){
 95      int i = low;
 96      int j = high;
 97      int tmp = arr[low];
 98      while(i < j){
 99           while(i < j && arr[j] >= tmp){
100               j--;
101           }
102           if(i < j){
103               arr[i] = arr[j];
104               i++;
105               while(i < j && arr[i] <= tmp){
106                  i++;
107              }
108              if(i < j){
109                  arr[j] = arr[i];
110                  j--;
111              }
112          }
113      }
114      arr[i] = tmp;
115    
116      return i;
117  } 
118    
119    
120    
121 void quickSort(int arr[], int left, int right){
122          if(left < right){
123                  int tmp = partition(arr, left, right);
124                  quickSort(arr, left, tmp - 1);
125                  quickSort(arr, tmp + 1, right);
126          }
127          return;
128 }
129  
130  
131  
132 int main(int argc, char **argv)
133 {     
134        int n = 10;
135        int m = 100;
136        int s = 50; 
       137        int *arr0 = (int *)malloc(sizeof(int)*n);
138        srand((int)time(NULL));                                          
139        for(int i = 0;i < n;i++){
140                *(arr0+i) = rand() % m;
141                //int *(arr1 + i) = rand() % m;
142                //int *(arr2 + i) = rand() % m;
143                //int *(arr3 + i) = rand() % m;
144                //int *(arr4 + i) = rand() % m;
145        }
146    
147        
148       /*
149       int arr0[] = {42, 93, 64, 15, 26, 57, 48, 79, 80};
150       int arr1[] = {42, 93, 64, 15, 26, 57, 48, 79, 80};
151       int arr2[] = {42, 93, 64, 15, 26, 57, 48, 79, 80};
152       int arr3[] = {42, 93, 64, 15, 26, 57, 48, 79, 80};
153       int arr4[] = {42, 93, 64, 15, 26, 57, 48, 79, 80};
154       */
155       int *ptrArr[] = {arr0};
156       int arrSize = n;
157       outArr("bubbleSort", "before", *(ptrArr + 0), arrSize);
158    
159       bubbleSort(*(ptrArr + 0), arrSize);
160       outArr("bubbleSort", "after", *(ptrArr + 0), arrSize);
161       /*
162       outArr("insertSort", "before", *(ptrArr + 1), arrSize);
163       insertSort(*(ptrArr + 1), arrSize);
164       outArr("insertSort", "after", *(ptrArr + 1), arrSize);
165       outArr("binaryInsertSort", "before", *(ptrArr + 2), arrSize);
166       binaryInsertSort(*(ptrArr + 2), arrSize);
167       outArr("binaryInsertSort", "after", *(ptrArr + 2), arrSize);
168       outArr("selectSort", "before", *(ptrArr + 3), arrSize);
169       selectSort(*(ptrArr + 3), arrSize);
170       outArr("selectSort", "after", *(ptrArr + 3), arrSize);
171       outArr("quickSort", "before", *(ptrArr + 4), arrSize);
172       quickSort(*(ptrArr + 4), 0, arrSize - 1);
173       outArr("quickSort", "after", *(ptrArr + 4), arrSize);
174       */
175       /*
176       int n = 10;
177       int m = 100;
178       int s = 50;
179       srand((int)time(NULL));
180       for(int i = 0;i < n;i++){
181               printf("%d",rand()%m);
182               printf("\n");
183       }*/
184  
185 }
186  
187  
188                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

一、rand()

rand()函数用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。

rand()会返回一个范围在0到RAND_MAX(至少是32767)之间的伪随机数(整数)。

在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同。

rand()函数需要的头文件是:<stdlib.h>

rand()函数原型:int rand(void);
使用rand()函数产生1-100以内的随机整数:int number1 = rand() % 100+1;

二、srand()

srand()函数需要的头文件仍然是:<stdlib.h>

srand()函数原型:void srand (usigned int seed);

srand()用来设置rand()产生随机数时的随机数种子。参数seed是整数,通常可以利用time(0)或getpid(0)的返回值作为seed。

使用rand()和srand()产生1-100以内的随机整数:

    srand(time(NULL));

    int number1 = rand() % 100+1;

三、使用rand()和srand()产生指定范围内的随机整数的方法

“模除+加法”的方法

因为,对于任意数,0<=rand()%(n-m+1)<=n-m

因此,0+m<=rand()%(n-m+1)+m<=n-m+m

因此,如要产生[m,n]范围内的随机数num,可用:

int num=rand()%(n-m+1)+m;

其中的rand()%(n-m+1)+m算是一个公式,记录一下方便以后查阅。

比如产生10~30的随机整数:

     srand(time(NULL));

      int a = rand() % (21)+10;

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!