某同学写了一个多线程快排,出现了莫名其妙的问题!
今晚自己也花点时间写一个类似的多线程排序代码。对于QuickSort!一直认为,出自不同人的手,在写法上至少那么一点儿的差别。
下面是我最常用的单线程版本的写法,
int quick(int A[], int a, int b)
{
int l = a, r = b, m = A[(a+b)>>1];
do{
while(A[l]<m) ++l;
while(A[r]>m) --r;
if(l<=r) swap(A[l++], A[r--]);
}while(l<r);
if(a<r) quick(A, a, r);
if(l<b) quick(A, l, b);
}
我在Linux下使用pthread线程函数库实现多线程的排序。下面是用到的一些多线程相关的结构和函数。
继续阅读