- 博客(8)
- 收藏
- 关注
原创 队列,队列的出队与入队(c++)链式队列
队列是一种数据结构,是一种特殊的受限的线性表,只能在头和尾操作,一端入队,一端出队。队列中一般用front(前)表示头结点,用于队列元素的出队,用rear(后)表示尾结点,用于队列添加元素(入队)。队列中储存元素的叫做结点,头节点不储存数据。形象来说,队列就像排队取票,队列前面的人取票离开,新来的在队列后面。
2023-12-19 19:39:31
726
原创 学习记录:合并排序算法及其时间复杂度
原理:每次数组取半,当数组元素数目为一时返回,当两个merge(左区间数组和右区间数组)返回到同一层次时,调用mergesort排序。由于从左到右:3比2先返回第一层,32比857先返回第零层,8比57先返回第一层,5比7先返回第二层。第三层: 5 7。4:2 3 5 7 8->2 3 5 7 8第零层。第二层:3 2 8 57。3:8 5 7->5 7 8第一层。总时间复杂度总为nlog(n)。1:3 2->2 3第一层。2:5 7->5 7第二层。
2023-12-10 00:38:03
351
1
原创 关于快速排序时间复杂度讨论
很明显,每一行时间都为O(n)。可以看到,在每次选取第一个为基准时,顺序的数列进行快排时调用栈的高度为n,所以得出最糟情况时间复杂度为O(n^2)。快速排序是D&C(分而治之)的经典算法之一,对于它的时间复杂度的讨论引入平均情况和最遭情况,事实上最佳情况也是平均情况。可以看到,此时栈的高度为log(n)。每一行时间复杂度为O(n)。得到最佳时间复杂度O(nlog(n))例如以下数列排序(在快排中对已经排好的数列也会执行排序,但是只有判断)如果每次取其中间呢(还是以上的数列)
2023-12-09 14:59:34
364
原创 学习记录:双边递归快速排序
以每个区间最左元素为基准,则从该区间最右开始。(必须从不同与基准数的一边开始)左边停止的数与右边停止的数交换,这样就实现了小的数左边放,大的数右边放。此时该点将大区间分为两个小区间,重新取边界值重复以上步骤。当左右遍历到同一点时,同时停止,基准数与该点的数交换。代码实现(可以优化得更简洁,时间复杂度与上述思路相同)左边开始向右判断,当遇到一个数比基准大则停止。当从右到左遇到一个数比基准小,则停止。双边快排原理:(递增数列)
2023-12-09 14:01:36
361
原创 学习记录:递归的单边快速排序(c++)
//当数组内没有元素时,结束。//更新左右边界,基准右边数组排序。} //输入10个随机数字。r = mark-1;//更新左右边界,基准左边数组排序。} //输出排序后数组。
2023-12-07 01:03:38
332
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人