1.快排的过程:
a)设置两个变量,分别指向数组的首尾,选择一个标志元素(一般是第一个元素)
b)从后向前找比标志元素小的值,从前向后找比标志元素大的值,将小的移到低端,将大的移到高端,更新标志元素的位置。
c)只要首尾两个指针不相遇,就循环进行
这样一次循环的结果是标志元素左边的都比它小,右边的都比它大
d)将被标志元素分开的两个数组再递归(a,b,c)
2.快排代码
class quicksort
{
public void sort(int left,int right,int str[])
{
int i,j,pos;
if(left>=right)
{
return;
}
i=left;
j=right;
pos=str[i];
while(i<j)
{
while(i<j && pos<=str[j])
{
j--;
}
if(i<j)
{
str[i]=str[j];
}
while(i<j && pos>=str[i])
{
i++;
}
if(i<j)
{
str[j] = str[i];
}
str[i]=pos;
sort(left,i-1,str);
sort(i+1,right,str);
}
}
}
3.多线程加速快排
a,b,c三步可以看成是一个小任务,将整个任务分成若干个小任务,分而治之。因为每个小任务之间有联系,不能跟求值的多线程一样,只