資源簡介
利用Pthread多線程工具 實現桶排序的并行化,并在linux下調試通過。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#define?MAX_BUCKET?10???/*桶容器的數量*/
#define?RANGE_BUCKET?10?/*每個桶容器的增量范圍*/
#define?MAX_NUMBERS?200?/*用于測試排序的數據總量*/
//定義數據節點,包含數據和指向下一個節點的指針
typedef?struct?_node?{
????int?data;
????struct?_node?*?next;
}
node;
//定義數據結構,傳遞至線程執行函數里面
struct?thread_data{
???int??thread_id;//當前線程的ID
???node?*in;//當前線程需要處理的單鏈表
};
//聲明線程,每個桶容器對應一個線程
pthread_t?threads[MAX_BUCKET];
//聲明傳遞至線程執行函數的結構體數組
struct?thread_data?thread_data_array[MAX_BUCKET];
//聲明桶排序函數
void?bucket_sort(int?array[]int?arraySize);
//聲明每個線程的處理函數
void?*thread_bucket_sort(void?*in);
//聲明插入排序函數
node?*insert_sort(node?*list);
//聲明計算桶容器下標的函數
int?returnBucketIndex(int?data);
//聲明桶容器,用于數據分配以及排序
node?**?all_buckets;
//聲明桶容器,用于在線程中排序完成后更新
node?**?all_buckets_t;
????
//桶排序函數定義
void?bucket_sort(int?array[]?int?arraySize)
{
????int?ij;
????
????//分配內存
????all_buckets?=?(node?**)malloc(sizeof(node?*)*MAX_BUCKET);
????all_buckets_t?=?(node?**)malloc(sizeof(node
- 上一篇:粒子群算法優化PID
- 下一篇:遺傳算法進行圖像分割
評論
共有 條評論