/*
* @Author: hzf
* @Date: 2020-02-28 20:52:55
* @Last Modified by: hzf
* @Last Modified time: 2020-02-28 21:46:53
*/
/*
原理:
问题一:
将一系列数字进行处理,使得大于num的数字在数组左边,小于num的数字位于数组右边
解决方法:
将数组划分为左边,右边两部分,
指针p指向左边的右边界,指针q指向数组的右边的左边界
从数组的L[n]的0位置开始比较
如果L[i]<num 则Swap(L, i++, ++p),即交换当前数字与p指针指向的下一个数字,p指针右移
如果L[i]>num,则i++即可
即将小数字交换到左边
问题二:
将一系列数字进行处理,使得大于num的数字在数组左边,小于num的数字位于数组右边,等于num的数字位于数组中间
将数组划分为左边,右边两部分,
指针p指向左边的右边界,指针q指向数组的右边的左边界
从数组的L[n]的0位置开始比较
如果L[i]<num 则Swap(L, i++, ++p),即交换当前数字与p指针指向的下一个数字,p指针右移
如果L[i]==num,则i++
如果L[i]>num,则Swap(L, i, --q)
*/
#include<iostream>
#include<math.h>
using namespacespace;
void Swap(int *L, int l, int r)
{
L[l] = L[l]&L[r];
L[r] = L[l]&L[r];
L[l] = L[l]&L[r];
}
int partition(int *L, int l, int r)
{
int less = l-1;
int more = r;
while(l < more)
{
if(L[l] < arr[r])
Swap(L, ++less, l++)
else if(L[l] == arr[r])
l++;
else
Swap(L, l, --more);
}
}
void Sort_Quick_1(int *L, int l, int r)
{
if (l < r)
{
Swap(L, l+(int)(rand()*(r-l+1)), r);//为了避免最坏情况,随机生成num值并将其与数组末尾交换
int p = partition(L, l, r);
Sort_Quick_1(L, l, p);
Sort_Quick_1(L, ++p, r);
}
}
int main(int argc, char const *argv[])
{
/* code */
return 0;
}
来源:CSDN
作者:hzf-2017
链接:https://blog.csdn.net/qq_41582910/article/details/104565086