ExistentStarts 发表于 2023-12-16 21:58

生成随机数,并线程排序

使用pthread_create()函数创建一个新线程,在该线程中对数组进行排序需要将数组作为参数传递给子线程,因此需要使用(void*)类型将数组强制转换为void*类型。
使用了pthread_join()函数等待线程结束,并检查是否成功。
最后,释放动态分配的数组,结束程序。
在main函数中,首先使用srand()函数设置随机数生成器的种子,以保证每次运行时生成的随机数序列不同。
动态分配一个大小为NUM的整型数组array,用于保存生成的随机数。
使用for循环生成NUM个随机数,将其保存到数组array中。
创建一个新线程th,并调用pthread_create()函数来执行sort函数。sort函数将被作为线程的入口点,对数组array进行排序。
使用pthread_join()函数等待线程th结束。这样可以确保在主线程继续执行之前,子线程已经完成了排序任务。
使用for循环遍历数组array,打印出排序后的结果。
最后,释放动态分配的数组内存,返回0以表示程序正常结束。#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define NUM 10000000

int cmp(const void* a, const void* b){
    return *(int*)a - *(int*)b;
}

void* sort(void* arg){
    int* array = (int*)arg;
    qsort(array, NUM, sizeof(int), cmp);
    return NULL;
}

int main(){
    srand((unsigned int)time(NULL));
    int* array = (int*)malloc(sizeof(int) * NUM);
    for (int i = 0; i < NUM; i++){
      array = rand();
    }

    pthread_t th;
    pthread_create(&th, NULL, sort, (void*)array);
    pthread_join(th, NULL);

    for (int i = 0; i < NUM; i++){
      printf("%d\n", array);
    }

    free(array);
    return 0;
}

CQGaxm 发表于 2023-12-17 06:50

学习学习,感谢分享

FruitBaby 发表于 2023-12-17 10:19

一条线程生成随机数,另一条进行排序是吧

冥界3大法王 发表于 2023-12-17 10:37

返回值:返回一个扩展类型的随机数。
单元:Math。
示例 :
RandG(2.5,0.001);


示例2
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin
i:=0;
while i=0 do
begin
    Randomize;
    i:=random(1000)//随机数在1000以内
end;
    Edit1.Text:=inttostr(i);
    if Edit1.Text=inttostr(100) then
    begin
      showmessage('随机数为:'+Edit1.Text);
      Timer1.Enabled:=False;
    end;
end;



Delphi
函数参考大全

156
Begin
Randomize;
For I:=0 to 6 do
begin
    Num:=random(10);
    showmessage(floattostr(Num));
end;
end;procedure TForm1.Button1Click(Sender: TObject);
Var I:integer;
   Num:array of integer;


示例1
MyRandom:=RandomFrom(num);
执行该语句后,MyRandom变量随机地得到Num 数组中的一个值。
示例2
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Randomize;
Edit1.text:=RandomFrom(['a1', 'a2', 'a3', 'a4']);
end;


利用随机数在题库中随机地抽出一道试题作为考题,供考生作答,具体应用如下。
procedure TForm1.Button1lick(Sender: TObject);
var
exam :array of string;
s:string;
begin
   exam:='请写出二叉树的中序遍历过程(非递归)';
   exam:='请写出二叉树的先序遍历过程(非递归)';
   exam:='请写出二叉树的后序遍历过程(非递归)';
   exam:='请写出二叉树与森林的转换过程';
   exam:='请写出图的广度遍历过程';
   randomize;
   s:=randomFrom(exam);
   caption:=s;
end;


示例
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Randomize;
Edit1.Text:=inttostr(Random(90));
end;


示例
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Randomize;
Edit1.Text:=inttostr(Random(90));
end;


a1:=RandomRange(20,50)

procedure TForm1.Timer3Timer(Sender: TObject);
var
RandSeed:Longint;
begin
Edit4.Text:=inttostr(RandSeed);
end;

还是咱们Delphi的代码看着整洁舒服啊。{:301_1006:}

MarioCrane 发表于 2023-12-17 15:26

冥界3大法王 发表于 2023-12-17 10:37
返回值:返回一个扩展类型的随机数。
单元:Math。
示例 :


begin end不觉得难受吗?
页: [1]
查看完整版本: 生成随机数,并线程排序