TypechoJoeTheme

鱼一的博客 ◡̈

yuyi

知不可乎骤得,托遗响于悲风
网站页面
标签搜索
搜索到 5 篇与 的结果
2023-01-10

希尔排序

希尔排序
希尔排序(Shell Sort)是插入排序的一种更高效的改进版本。它首先将较大的数组分割成多个子数组,每个子数组由一定间隔的元素组成,然后对这些子数组应用插入排序,逐渐减小间隔,最后当间隔为1时,整个数组就变成了普通的插入排序,此时数组已经是部分排序的,从而减少了普通插入排序的操作次数。这种方法由Donald Shell于1959年提出,故称为希尔排序。让我们分步来理解你提供的希尔排序代码:步骤和代码解析初始化间隔(gap):for (int gap = n / 2; gap > 0; gap /= 2) 这一行设置了初始的间隔为数组长度的一半,并在每次迭代后将间隔减半,直到间隔为0(实际上循环在间隔为1时就停止了)。间隔 gap 用于定义子数组,每个子数组包括间隔为 gap 的元素。处理每个子数组:for (int i = gap; i < n; i++) 这一行的循环是对每个间隔为 gap 的子数组执行插入排序。i 从 gap 开始,表示从第一个间隔的位置开始直到数组结束。变量 i 表示当前要进行插入排序的元素。插入排序的修改版:int temp = arr[i]...
2023-01-10
2023年01月10日
0 阅读
0 评论
2023-01-09

选择排序

选择排序
选择排序是一种基本的排序算法,它通过在每次迭代中选择剩余元素中的最小(或最大)元素,并将其放到已排序序列的末尾来工作。在选择排序中,我们同样看到两层循环,每层循环的作用和次数具有其特定的逻辑和意义。外层循环外层循环的变量通常被称为 i,这个循环控制选择过程的次数。对于一个包含 n 个元素的数组,最多只需要进行 n-1 次选择来完成排序。这是因为当你已经正确放置了 n-1 个元素之后,最后一个元素自然就处于其正确的位置,无需再进行选择和交换。换句话说,进行 n-1 次选择后,整个数组就已经被完全排序了。内层循环内层循环的变量通常被称为 j,这个循环负责查找从 i+1 到 n 的范围内的最小元素。内层循环从 i+1 开始是因为在每一轮的开始,i 位置之前的所有元素已经被排序好,因此不需要再次考虑它们。这个循环将遍历未排序的部分,查找最小元素的索引。这里的 n 是因为内层循环需要检查数组中剩余未排序部分的所有元素。对于每一轮,你开始时已经有 i 个元素是排序好的,所以你需要从 i+1 开始,直到数组的末尾 n,这样可以保证考虑所有可能是当前最小的元素。总结在选择排序中:外层循环 定义了...
2023-01-09
2023年01月09日
0 阅读
0 评论
2023-01-08

插入排序

插入排序
插入排序是一种简单直观的排序算法,它通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。以下是插入排序的一些关键细节和为何这种方式有效:关键细节排序的起始点:插入排序从数组的第二个元素开始,即 i = 1。这是因为单个元素(数组的第一个元素)可以认为已经是排序好的。内部循环条件:内部循环使用 j 来比较已排序的元素和当前要排序的元素(key)。如果 key 小于 arr[j],则说明 key 应该在 arr[j] 之前,因此 arr[j] 向后移动一个位置到 arr[j+1],为 key 腾出空间。终止和元素插入:j 递减进行,直到找到 key 的正确位置。当 arr[j] 不再大于 key 或 j 减小到 -1(即 key 应该是当前已排序序列中最小的元素),循环停止。然后将 key 插入到 arr[j+1]。效率考虑:插入排序的效率在部分排序的数组中表现较好。在最好情况下(数组已经完全排序),它的时间复杂度为 (O(n)),因为内部循环不会执行任何操作。在平均情况或最坏情况下(数组完全反序或随机),时间复杂度为 (O(n^2))。稳定性:插入排序...
2023-01-08
2023年01月08日
0 阅读
0 评论
2023-01-07

冒泡排序

冒泡排序
冒泡排序是一种简单的排序算法,其工作原理是通过重复交换相邻的元素来排序,如果它们的顺序错误就交换它们。在冒泡排序中,我们看到有两层循环,每一层循环的作用和次数都有特别的意义。外层循环外层循环的变量通常被称为 i,这个循环控制整个排序过程需要多少轮比较。对于一个包含 n 个元素的数组,最多需要 n-1 轮比较来确保数组完全排序。原因是每完成一轮排序后,可以确保至少有一个元素(即最大的元素)被移动到其正确的位置(最后或开始,取决于是升序还是降序)。在每轮排序结束后,下一次排序的任务就少了一个元素,因为最后的元素已经是排序好的了。内层循环内层循环的变量通常被称为 j,这个循环负责在数组中进行实际的元素比较和交换操作。内层循环的范围从数组的开始一直到 n-i-1。这里的 n-i-1 是因为,随着外层循环每进行一次迭代,数组末尾的 i 个元素已经排好序了,因此无需再对它们进行比较。这样,每进行一轮外层循环,内层循环的次数就减少一次,因为每次都会有一个元素被正确排序在数组的末端。为什么是 n-i-1n-i-1 的计算确保了排序算法的效率。首先,每次内层循环结束后数组的末尾都会固定一个最大(或...
2023-01-07
2023年01月07日
0 阅读
0 评论
2019-04-01

链表实践代码

链表实践代码
数据结构之链表创建链表元素类创建链表类为链表类创建方法函数1.创建链表元素类链表是由一个个元素链接而成的。所以第一步,我们先创建一个链表元素类,来表示我们的链表上的元素。接着我们通过 __init__ 方法给它定义两个属性,self.value和self.next 。class Element(object): def __init__(self, value): self.value = value self.next = None2.创建链表类一个链表在最初被创建的时候,它至少需要一个元素。链表是由元素链接而成,它的第一个元素,我们称它为头部元素。所以我们在__init__方法里给链表类定义了一个属性,self.head = headclass LinkedList(object): def __init__(self, head=None): self.head = head3.为链表类创建函数方法append方法get_position方法insert方法delete方法我们将为链表类创建以上四个方法。app...
2019-04-01
2019年04月01日
0 阅读
1 评论

More Info for me 📱

IP信息

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月