Linux下C语言实现多线程排序代码
时间: 2024-04-30 12:23:48 浏览: 109
以下是一个简单的Linux下C语言实现多线程排序的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 4
#define ARRAY_SIZE 10000
int array[ARRAY_SIZE];
void* sort(void* arg) {
int id = *(int*)arg;
int start = id * (ARRAY_SIZE / NUM_THREADS);
int end = (id + 1) * (ARRAY_SIZE / NUM_THREADS);
// 使用快速排序对数组进行排序
qsort(&array[start], end - start, sizeof(int), compare);
pthread_exit(NULL);
}
int compare(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
int main() {
pthread_t threads[NUM_THREADS];
int thread_ids[NUM_THREADS];
// 初始化数组
for (int i = 0; i < ARRAY_SIZE; i++) {
array[i] = rand();
}
// 创建线程
for (int i = 0; i < NUM_THREADS; i++) {
thread_ids[i] = i;
pthread_create(&threads[i], NULL, sort, &thread_ids[i]);
}
// 等待线程结束
for (int i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
// 合并排序结果
int sorted_array[ARRAY_SIZE];
int indexes[NUM_THREADS];
for (int i = 0; i < NUM_THREADS; i++) {
indexes[i] = i * (ARRAY_SIZE / NUM_THREADS);
}
for (int i = 0; i < ARRAY_SIZE; i++) {
int min_index = -1;
for (int j = 0; j < NUM_THREADS; j++) {
if (indexes[j] < (j + 1) * (ARRAY_SIZE / NUM_THREADS)) {
if (min_index == -1 || array[indexes[j]] < array[indexes[min_index]]) {
min_index = j;
}
}
}
sorted_array[i] = array[indexes[min_index]];
indexes[min_index]++;
}
// 打印排序结果
for (int i = 0; i < ARRAY_SIZE; i++) {
printf("%d ", sorted_array[i]);
}
printf("\n");
return 0;
}
```
这个代码使用了4个线程对一个10000个整数的数组进行排序,实现了快速排序算法。每个线程排序数组的一个子集,然后合并排序结果。使用pthread库实现多线程功能,包括创建线程、等待线程结束等。
阅读全文