优化1:首先优枢轴元素不为第一个元素,而是为左中右中的中间值。
优化2:优化不必要的交换
int Partition(int s[], int low, int high)
{
int pivotkey;
int m=(low+high)/2;
if(s[low]>s[high])
Swap(&s[low],&s[high]);
if(s[m]>s[high])
Swap(&s[m],&s[high]);
if(s[m]>s[high])
Swap(&s[m],&s[high]);
pivotkey = s[low]; /*用子表第一个元素作枢轴记录*/
while (low < high)
{
while (low < high&&s[high] >= pivotkey)
high--;
s[low]=s[high];//替换而不是交换
while (low < high&&s[low] <= pivotkey)
low++;
s[high]=s[low];//替换而不是交换
}
s[low]=pivotkey;
return low;
}