排序在数据结构中是很重要的一个部分,而快排有时我们使用最频繁的排序算法,划分算法又是快排中的精髓,下面就介绍如何写快速排序算法中的划分算法
首先给出一组数据,在给出在数组中的最低位(low)和最高位(high),并且将数组的0号位置作为监视哨使用,用来存放当前要划分的数字,然后以这个数字为基准进行划分,当在low<high的时候,先从low端比较,low端的数据应该比R[0]小,当发现比R[0]大的数据时,将这个数据付给R[high],然后从high端进行比较,当发现比R[0]小的数据时,将R[high]付给R[low],然后重复上述过程直到退出循环为止,最后将R[0]的值付给R[high]或者R[low],因为在退出循环的时候,high和low相等,此时high或low的位置就是R[0]最后存放的位置,这一趟划分就结束了。代码如下:
#include <stdio.h>
#include <stdlib.h>
int divide(int R[],int low,int high)
{
R[0]=R[low];
while(low<high)
{
while(low<high&&R[low]<=R[0])
low++;
if(low<high)
{
R[high]=R[low];
high--;
}
while(low<high&&R[high]>R[0])
high--;
if(low<high)
{
R[low]=R[high];
low++;
}
}
R[low]=R[0];
return low;
}
int main()
{
return 0;
}
而快速排序就是在多次重复的进行划分算法,此算法的时间复杂度为O(nlog2n),空间复杂度为(log2n),因为是递归的执行用到堆栈