![](https://img-blog.csdnimg.cn/20201224185609158.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构和算法
数据结构和算法
「已注销」
这个作者很懒,什么都没留下…
展开
-
常见排序算法和复杂度
原创 2021-01-11 17:22:29 · 61 阅读 · 0 评论 -
二分查找
目录二分查找简述核心代码 二分查找 简述 二分法查找是在一组有序数据中寻找目标值,并获得目标值所在的下标位置。 二分法查找也叫折半查找,基本逻辑是每次都向中间位置找,然后缩小一半范围再向中间位置找。 查找结束时,低位下标和高位下标可以重叠 如果低位下标和高位下标交叉,则说明查找的目标值不存在。最终低位下标值则是目标值应插入的位置 注意:正整数/2是向下取整,所以最后的交叉必然是高位下标越过低位下标导致(具体看下图) 核心代码 public class BinarySearch { publ原创 2021-01-05 12:37:52 · 57 阅读 · 0 评论 -
数据结构------常见的数据结构
常见的数据结构 栈原创 2020-12-29 19:43:53 · 89 阅读 · 0 评论 -
快速排序
归并排序 简述 过程-简图 时间复杂度 // 任何情况都要比较 NlogN 次 //待甄别 时间复杂度:O(NlogN) (以2为底) 核心代码 1)递归分解 序列 public static void merge_sort(int a[],int first,int last,int temp[]){ if(first < last){ int middle = (first + last)/2; merge_sort(a,first,middle,temp);//原创 2020-12-29 00:43:32 · 80 阅读 · 0 评论 -
归并排序
归并排序 简述 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 1)首先考虑下如何将2个有序数列合并: 只要比较2个数列的第一个数,谁小就先取谁。 取了后就在对应数列中删除这个数。然后再进行比较。 如果有数列为空,那直接将另一个数列的数据依次取出即可。 2)再来看归并排序: 其的基本思路就是将数组分成2组 A 和 B。 如果这2组组内的数据都是有序的,那么就可以很方便的将这2组数据进行 合并和排序。原创 2020-12-27 00:13:58 · 80 阅读 · 0 评论 -
希尔排序
希尔排序 简述 思想: 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。 过程: 选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1; 按增量序列个数 k,对序列进行 k 趟排序; 每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接原创 2020-12-25 01:53:36 · 94 阅读 · 0 评论 -
插入排序
插入排序 简述 将第一待排序序列第一个元素看做一个有序序列; 把第二个元素到最后一个元素当成是未排序序列; 从头到尾依次扫描未排序序列, 将扫描到的每个元素插入有序序列的适当位置(关键!!!); 如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素之后; 每轮比较前,记录好下标为 i 的待插入元素的值,i从1开始 将下标为 i 的元素与前 (i - 1)个有序元素 从后往前 依次比较 每次比较,设置条件:若 被比较的元素的值 大于 待插入元素的值,则 被比较的元素 值后移 直到条件不成立原创 2020-12-25 01:38:00 · 106 阅读 · 0 评论 -
选择排序
选择排序 简述 N个长度的数组 总共要经过 N-1 轮比较 每轮需要比较的次数 N-i,默认下标为 i 的元素为当前轮的最小值 每次比较,记录当前的最小值的下标/索引为 min 每轮结束,替换下标 i 和 下标 min 处的元素 全部完成 N-i 轮后,排序完毕 核心代码 public static int[] sort(int[] sourceArray) { // 对 arr 进行拷贝,不改变参数内容 int[] arr = Arrays.copyOf(sourceArr原创 2020-12-25 00:38:29 · 75 阅读 · 1 评论 -
冒泡排序
冒泡排序 简述 N个长度的数组 共比较 N-1 轮 第 i 轮,比较 N-i 次 当某一轮的比较次数为0,说明已完成排序,比较结束 核心代码 public static int[] sort(int[] sourceArray) { // 对 arr 进行拷贝,不改变参数内容 int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); for (int i = 1; i < arr.lengt原创 2020-12-25 00:12:21 · 68 阅读 · 0 评论