首页 > 编程知识 正文

快速排序c语言讲解,数据结构快速排序图解

时间:2023-05-06 14:27:32 阅读:20684 作者:752

本人使用栈外栈模拟递归的过程。 以下是堆栈的结构、递归代码和非递归。

类型结构

{

int*base;

inttop;

}堆叠;

voidnonrec_quicksort(sqlistl,intlow,inthigh ) )。

//非递归快速排序

{

if(low=high ) )。

返回;

intleft;

intright;

intpivot;

星巴克;

S.base=newint[24];

//log2300024

S.top=0;

S.base[S.top ]=high;

S.base[S.top ]=low;

while(s.top ) )。

{

left=S.base[--S.top];

right=S.base[--S.top];

pivot=get_pivotloc(L,left,right );

//Get_pivotloc函数得到各支点的最终位置

if(pivot1)

{

S.base[S.top ]=right;

S.base[S.top ]=pivot 1;

}

左足

{

S.base[S.top ]=pivot-1;

S.base[S.top ]=left;

}

}

}

语音快速排序(sqlistl,intlow,inthigh ) )。

//递归快速排序

{

低电平

{

intpivot=get_pivotloc(L,low,high );

快速排序(l,low,pivot-1 );

快速排序(l,pivot 1,high );

}

}

本人每次实验数据:排序6组,3000个元素

现在我有两个问题:

本人分别用递归排序和非递归排序对几乎相同的随机数据进行排序,但递归总是比非递归快,但并不快。 9秒左右。 为什么在同一堆栈的过程中,递归堆栈会很快,而本人写的堆栈过程会很慢呢? 是本人优化不够,还是其他因素影响了?

本人进一步对一组初始状态顺序的数据进行排序,发现在非递归排序中,如果本人组元素有3000个,本人只需要给堆栈分配3个空间

S.base=newint[3];

在本人分析并执行后,发现确实可以。 但是快速排序的空间复杂性不是o(log2n )吗? 这个空间的复杂性是指堆栈空间还是其他?

这两个问题触及了本人知识的盲点…

虽然没有要求那样做

但是我很好奇,想知道……

大家有想法或答案吗?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。