数据结构算法
文章平均质量分 60
LvQiFen
这个作者很懒,什么都没留下…
展开
-
手写快速排序算法
快速排序算法思路从小到大排序时快速排序算法原理:快速排序利用了分治的思想,采用递归来实现如果要排序一个数组,先取一个参照数(这里取数组最后一个数作为参照)把数组从分成以参数为”中间“结点的前后2部分,数组中参照数之前的都小于参照数,参照数之后的都大于参照数,然后,对参照数的前后两部分分别排序 这样整个数组就有序了。递推公式:quickSort(p,r) = partition(p,r)+quickSortCore(p,q-1)+quickSortCore(q+1,r);q = parti原创 2022-04-11 19:03:07 · 1126 阅读 · 0 评论 -
手写归并排序算法
归并排序算法思路从小到大排序时归并排序算法原理:归并排序利用了分治的思想,采用递归来实现如果要排序一个数组,先把数组从中间分成前后2部分,然后,对前后两部分分别排序再将排好序的两部分合并在一起,这样整个数组就有序了。递推公式:1. mergeSort(p,r) = merge(mergeSortCore(p,q),mergeSortCore(q+1,r));2. q = (p+r)/2;3. 终止条件:p>=r 不用继续分解4. p: 每段的起始下标5. r: 每段的末尾下标原创 2022-04-08 14:08:57 · 1050 阅读 · 0 评论 -
一个球从100米的高度自由落下,每次落地后反弹回原来高度的一半,然后再落下的问题
题目: 一个球从100米的高度自由落下,每次落地后反弹回原来高度的一半,然后再落下,求它在第10次落地时,共经过多少米?第10次反弹的高度是多少?package org.geekbang.作业.第一周;/** * @author 起凤 * @description: TODO * @date 2022/4/5 */public class Test { public static void main(String[] args) { h(); s.原创 2022-04-06 23:20:32 · 4107 阅读 · 1 评论 -
手写选择排序算法
选择排序算法思路从小到大排序时选择排序算法原理:选择排序算法实现的思路有点类似插入排序,也是将整个数组划分为已排序区和未排序区间。不同点在于:选择排序算法每次从未排序区间中,找到最小的元素,将其放入已排序区间的末尾。这里假设默认的已排序区在下标为 -1的位置。(插入排序是默认已排序区是下标为0的位置开始:即假设第一个是已排序的,1~n是未排序区)时间复杂度:O(n^2)最坏情况下(即从大到小排列) O(n^2) 逆序情况下代码执行最多次的是 arr[j] < arr[minPo原创 2022-04-06 22:43:46 · 464 阅读 · 0 评论 -
手写插入排序算法
插入排序算法思路从小到大排序时插入排序算法原理:将数组中的数据分为2个区域:已排序区间和未排序区间。初始时已排序区间只有一个元素,就是数组中的第一个元数核心思想就是取未排序区间中的元素,在已排序区间中找合适插入位置将其插入,保证已排序区间数据一直有序重复这个过程直到未排序区间中元素为空,算法结束。时间复杂度:O(n)~O(n^2)之间。最坏情况下(即从大到小排列) O(n^2) 逆序情况下代码执行最多次的是 arr[i] < arr[j],第一趟执行 1次,第二趟执行 2次…原创 2022-04-05 23:16:46 · 858 阅读 · 0 评论 -
手写冒泡排序算法
手写冒泡排序算法从小到大排序时冒泡排序是 多趟冒泡操作,第一趟会把最大值放到倒数第一、第二趟会把余下的数中最大值放到倒数第二、以此类推排完…第一层是控制多少趟,由于它是每次前后2个数值进行比较,当只有2个数值时只比较一趟,类推n个数值就是 n-1趟次即可。第2层循环中,第二层次的循环里是 j < arr.length - 1 -i,每趟过后,末尾长度减一;每趟里都是前后2个元素比较,找出大的值交换位置放后面交换操作就在第二次循环中。时间复杂度:O(n^2)~O(n)之间。最坏情况下(原创 2022-04-05 21:30:42 · 1484 阅读 · 0 评论