快速排序:
数据分割:hore提出快排思想的大佬
取区间最左侧或者最右侧的数据为基准值;
(用begin标记数组最前面的元素,end标记最后面的元素,begin从前往后移动,end从后往前移动,如果begin和end没遇到或者没有错过,begin找到一个比基准值大的就停止,end找到一个比基准值小的就停止,交换begin和end所指元素最后交换相遇位置的和最右侧的元素 );
//交换代码
void Swap(int* left,int* right)
{
int tmp = *left;
*left = *right;
*right = tmp;
}
//分割代码1
//hoare:提出快排思想的大佬提出的
int Partion1(int* array, int left, int right)
{
int begin = left;
int end = right - 1;
int key = array[end];
while(begin<end)
{
while(begin<end && array[begin]<=key)
begin++;
while(begin<end && array[end]>=key)
end--;
//如果begin与end相遇,相遇点一定为大于等于分隔值
if(begin<end)
Swap(&array[begin],&array[end]);
}
if(begin != right-1)
Swap(&array[begin],&array[right-1]);
return begin;
}
//分割代码2
//挖坑法
int Partion2(int* array,int left,int right)
{
int begin = left;
int end = right-1;
int key = array[end];
while(begin<end)
{
while(begin<end && array[begin]<=key)
begin++;
if(begin<end)
{
array[end] = array[begin];
end--;
}
while(begin<end && array[end]>= key)
end--;
if(begin<end)
{
array[begin] = array[end];
begin++;
}
}
array[begin] = key;
return begin;
}
//分割代码3
int Partion3(</