课本上发现的例题:
看后面的算法示例,了解到划分算法:
划分:快速排序的一个根本机制
划分数据:将数据分为2组,使所有关键字>特征值的数据在一起,关键字<特定值的数据在一起(每组不一定按顺序排列)
划分的过程不一定把数组分成大小相同的两半
划分算法:
先找到标准值(按题目说选第一个),记录为standard
由两个指针开始工作(又是类双指针…),两个指针low和high分别指向数组的两头,向中间移动
当low的数据小于标准值standard时,继续向中间移动;同理,high的数据>standard时,向中间移动,直到出现位置错误的数据,low和high指向的数据交换
在low=high时,值指向数据上的中间位置,对其赋值为标准值
代码
void swap(int a[],int m,int n)
{
int t=a[m];
a[m]=a[n];
a[n]=t;
}
void part(int a[],int size)
{
int standard=a[0];
int low=1;
int high=size;
while(low<high)
{
while(low<high&&a[high]>=standard) high--;
swap(a,low,high);
while(low<high&&a[low]<=standard) low++;
swap(a,low,high);
}
a[low]=high;
}
可以看出,时间复杂度O(n)