用到一个方法,交换两个数的值
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
递归实现
void quickSortByRecursion(int *p, int length) //传递数组指针跟数组长度
{
int *left = p; //第一个值设为中间值
int *right = p + length - 1;
if (left < right) //当左边点指针小于右边的指针继续递归
{
while (left < right)
{
while (*left <= *p && left < right)
left++;
while (*right >= *p && right >= left)
right--;
if (left < right)
swap(left, right);
}
swap(p, right); //把第一个值跟righ对应的值交换,此时right指向小于中间值的最后一个数
quickSortByRecursion(p, right - p); //递归小于中间数
quickSortByRecursion(right + 1, length - (right - p) - 1);//递归大于中间数
}
}
创建一个栈,提供压栈,出栈等方法
typedef struct stru //栈结构体
{
int *p;
int len;
int *pnext;
} st;
st *stack=NULL;
void push(int *p,int len) //压栈
{
st *nst = (st *)malloc(sizeof(st));
nst->pnext = stack;
nst->p = p;
nst->len = len;
stack = nst;
}
st* pop()//出栈
{
st *n = stack;
if (stack)
stack = stack->pnext;
return n;
}
int isempty()//判断是否为空
{
if (stack)
return 0;
else return 1;
}
快速排序栈实现方法
void quickSortByStack(int *p, int len)
{
push(p, len);
while (!isempty())//栈为空时结束
{
st *n = pop(); //弹出执行参数
p = n->p;
len = n->len;
int *pleft = p;
int *pright = p + len - 1;
if (pleft < pright)
{
while (pleft < pright)
{
while (*pleft <= *p&&pleft < pright)
pleft++;
while (*pright >= *p&&pright >= pleft)
pright--;
if (pleft < pright)
swap(pleft, pright);
}
swap(p, pright);//把第一个值跟righ对应的值交换,此时right指向小于中间值的最后一个数
push(p, pright - p); //把需要在快拍的指针跟长度轧入栈
push(pright + 1, len - (pright - p) - 1);//把需要在快拍的指针跟长度轧入栈
}
}
}