请帮我编写能随机生成一千万个整数的C语言程序,并且使用多线程技术对他们排序
时间: 2024-03-01 14:51:00 浏览: 64
产生随机数的C语言程序
5星 · 资源好评率100%
好的,以下是一个简单的C语言程序,可以随机生成1000万个整数,并使用多线程技术对它们进行排序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define MAX_NUMS 10000000
int nums[MAX_NUMS];
void *sort(void *arg) {
int start = *(int *)arg;
int end = start + MAX_NUMS / 4;
qsort(nums+start, end-start, sizeof(int), compare);
return NULL;
}
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
int main() {
srand(time(NULL));
int i;
for (i = 0; i < MAX_NUMS; i++) {
nums[i] = rand();
}
pthread_t threads[4];
int args[4] = {0, MAX_NUMS/4, MAX_NUMS/2, 3*MAX_NUMS/4};
for (i = 0; i < 4; i++) {
pthread_create(&threads[i], NULL, sort, (void *)&args[i]);
}
for (i = 0; i < 4; i++) {
pthread_join(threads[i], NULL);
}
// Merge sorted subarrays
int sorted[MAX_NUMS];
int start[4] = {0, MAX_NUMS/4, MAX_NUMS/2, 3*MAX_NUMS/4};
int end[4] = {MAX_NUMS/4, MAX_NUMS/2, 3*MAX_NUMS/4, MAX_NUMS};
int index[4] = {0, 0, 0, 0};
for (i = 0; i < MAX_NUMS; i++) {
int k;
int min = 0;
for (k = 1; k < 4; k++) {
if (index[k] < end[k] && nums[start[k]+index[k]] < nums[start[min]+index[min]]) {
min = k;
}
}
sorted[i] = nums[start[min]+index[min]];
index[min]++;
}
// Print the first 10 sorted numbers
for (i = 0; i < 10; i++) {
printf("%d\n", sorted[i]);
}
return 0;
}
```
这个程序首先使用rand()函数随机生成1000万个整数,并将它们存储在nums数组中。然后,它创建4个线程,每个线程负责对nums数组的一个四分之一进行排序。在每个线程中,使用qsort()函数对相应的子数组进行排序。qsort()函数是C标准库中的快速排序函数,可以对任意类型的数组进行排序。
排序完成后,程序将使用归并排序算法将四个已排序的子数组合并为一个完整的已排序数组。最后,程序输出已排序数组中的前10个数字。
注意,这个程序使用了pthread库来实现多线程,并且假设您的机器支持四个线程运行。如果您的机器支持更多线程,则可以相应地调整线程数和每个线程负责的子数组大小。
阅读全文