自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 归并排序详解

归并排序,也是应用了分治的思想。将原数组分为两个子数组,左子数组和右子数组,两个子数组排好序后,通过拷贝的方法将两个数组边排序边合并。合并过程则是将拆分的子数组依次合并,直到合并到原数组的长度即排序完成。故总时间复杂度为:(n + n) + 2*(n/2 + n/2) + 4*(n/4 + n/4) + …排序过程中用到的最大辅助空间为n,每次归并的过程都会申请对应长度的辅助空间,归并完成后释放。对于长度为n的数组,排序过程中,占有时间的地方有:将数组合并的过程,和辅助数组覆盖原数组的过程。

2024-07-11 15:23:30 260

原创 希尔排序详解

希尔排序(也称为缩小增量排序)采用的是分治的思想,设定一定的间隔,按照这个间隔将集合分成若干个子集合,然后对子集合进行排序;逐渐减小这个间隔,直到完成间隔为1的这次排序,即完成集合的排序。对于长度为n的集合,为它设置n/2的初始增量,该增量下分出n/2个长度为2或3的子集合,分别对它们进行插入排序;初始增量减半,变为n/2。排序过程会将不相邻的两个元素交换,有可能打乱两个相同元素之间原有的顺序,故希尔排序是。,用希尔排序对这个长度为16的数组进行排序。的遍历,时间复杂度为:子集合个数n/2。

2024-07-10 16:40:39 223

原创 冒泡排序详解(含优化版——鸡尾酒排序)

这样的数据,如果采用上面的冒泡策略,则需要将左边的数依次冒出到-1的右边。这时候就有了一种对冒泡排序的改进思路:每轮冒泡时,往右边冒出一个泡(最大值),再往左边冒出一个泡(最小值),这就是鸡尾酒排序。每次冒泡都遍历比较每个未冒出的元素,最大/最小的值往后冒。每次冒出元素都是相邻元素进行比较交换,不会破坏相同元素之间的相对顺序,故冒泡排序算法是。,拷贝数组,分别用冒泡排序和鸡尾酒排序对数组进行排序(仅展示鸡尾酒排序过程),拷贝数组,分别用冒泡排序和鸡尾酒排序对数组进行排序。,用冒泡排序对数组进行排序。

2024-07-10 13:41:25 393

原创 插入排序详解

对于长度为n的集合,排序过程中,每次插入一个元素,因此需要插入n-1次。每次插入都要把元素插入合适的位置,这其实是依次跟前一个元素交换位置的过程。最差情况:[8,7,5,2,1],数组逆序,因此每次插入元素,都需要从最后面依次向前交换。插入元素的过程中,用的的交换元素方式都是与旁边的元素进行交换,且只有在小于时才交换,因此排序过程不会改变相同元素的相对顺序。最好情况:[1,2,5,7,8],数组已然有序,这时候每次插入元素,都直接把他放在元素的最后面。,将其他元素也依次插入,插入完成即排序完成。

2024-07-09 20:43:26 335

原创 选择排序详解

对于长度为n的集合:”每次找出最小的元素,放到当前排序位置。而每次找元素都需要从头到尾遍历剩余元素。故时间复杂度:n * (n + n-1 + n-2 + …+1) = n * (n+1)/2 ≈。无论数据是什么,算法都会经过完成所有的遍历过程,不会因为数据的特殊性而改变运行时间,因此选择排序算法是。选择排序,就是通过选出最大或最小的元素,放到目前排序位置后面,每次排一个元素,排n次后使集合有序。算法几乎没有用到额外辅助空间,故空间复杂度为。,用选择排序对原数组进行排序。,用选择排序对原数组进行排序。

2024-07-09 16:54:49 191 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除