帮我检查有没有问题#include <stdio.h> #include <stdlib.h> #include <pthread.h> #define SIZE 50000000 #define SUB_SIZE 10000000 //qsort()对每10000000个数进行排序 int cmp(const void *a,const void *b) { return *(int*)a-*(int*)b; } //线程函数 void *sort_single(void *arg){ int *start = (int*)arg; qsort(start, 10000000, sizeof(int), cmp); return NULL; } //归并算法排序 void merge(int *array) { int temp[SIZE]; int indexes[5]; int i, min_value, min_index; for (i = 0; i < 5; i++) { indexes[i] = i * SUB_SIZE; } for (i = 0; i < SIZE; i++) { min_value = array[indexes[0]]; min_index = 0; for (int j = 1; j < 5; j++) { if (indexes[j] < (j + 1) * SUB_SIZE && array[indexes[j]] < min_value) { min_value = array[indexes[j]]; min_index = j; } } temp[i] = min_value; indexes[min_index]++; } for (i = 0; i < SIZE; i++) { array[i] = temp[i]; } } int main(){ //用于存放需要排序的数字的动态数组 int i; int *array = (int *)malloc(SIZE * sizeof(int)); //初始化待排序的数组 for (int i = 0; i < SIZE; i++) { array[i] = rand() % SIZE; } pthread_t pthreads[5]; for (i = 0; i < 5; i++) { pthread_create(&pthreads[i], NULL, sort_single, (void*)(array + i * SUB_SIZE)); } for (i = 0; i < 5; i++) { pthread_join(pthreads[i], NULL); } //归并排序 merge(array); //50000000,输出排序后的数组 for(int m = 0;m < SIZE;m++){ printf("%d ", array[m]); if(m%19 ==0 && m!=0){ printf("\n"); } } //释放内存 free(array); return 0; }
时间: 2024-04-14 16:31:41 浏览: 71
C标准库函数集
5星 · 资源好评率100%
代码看起来没有明显的问题,基本上实现了你的需求。以下是我注意到的一些细节:
1. 在 `sort_single` 函数中,使用了硬编码的值 `10000000`,建议使用 `SUB_SIZE` 宏定义来保持一致性。
2. 在 `merge` 函数中,使用了硬编码的值 `5` 和 `(j + 1) * SUB_SIZE`,同样建议使用宏定义来保持一致性。
3. 在 `main` 函数中,你在两个地方都声明了变量 `i`,第一个 `int i;` 是多余的,可以删除。
4. 在打印排序后的数组时,你使用了一个条件 `m%19 == 0 && m!=0` 来换行,这个条件可以改为 `m % 20 == 0` 更直观。
除此之外,代码看起来是可行的,可以尝试编译和运行以验证结果。记得在最后释放动态分配的内存。
阅读全文