
数据结构
KKKKKKOBE_24
这个作者很懒,什么都没留下…
展开
-
[二分查找/Java]基本的二分查找、寻找左/右边界的二分查找
1. 二分查找框架int binarySearch(int[] nums, int target){ int left = 0; int right = ... while(...){ int mid = left + (right - left) / 2; if(nums[mid] == target){ ... }else if(nums[mid] < target){ lef原创 2021-05-18 16:41:11 · 482 阅读 · 0 评论 -
[PriorityQueue/Java]PriorityQueue(优先队列)
1. 堆(Heap)、完全二叉树、堆排序1.1 堆(Heap)的定义从堆的定义可以看出,堆的实质是满足如下性质的完全二叉树:二叉树中任一非叶子结点均小于(大于)它的孩子结点1.2 完全二叉树树中的结点按从上大小,一层一层,每层从左到右来编号。1.3 堆排序若在输出堆顶的最小值(最大值)后,使得剩余n-1个元素的序列重新又建成一个堆,则得到n个元素的次小值(次大值)…如此反复,便能得到一个有序序列,这个过程称之为堆排序。2. PriorityQueue(优先队列)优先队列是堆排序的应用原创 2020-10-24 10:27:25 · 235 阅读 · 0 评论 -
[排序/C++]7. 排序算法详细代码
7. 各排序算法详细代码排序文章汇总:排序基础知识和总结插入排序:直接插入排序、二分插入排序、希尔排序交换排序:冒泡排序、快速排序快速排序:简单选择排序、堆排序归并排序:2-路归并排序基数排序代码备注:各排序算法代码都是基于带哨兵的序列,即L.nums[0]为哨兵位,记录/数据元素都从L.nums[1]开始存储!!!#include <iostream>using namespace std;#define MAXSIZE 20 //最大数据元素数原创 2020-08-18 09:48:31 · 270 阅读 · 0 评论 -
[排序/C++]6. 基数排序
6. 基数排序也叫桶排序或箱排序6.1.1 算法分析和思路基本思想:分配+收集分配:设置若干个箱子,将关键字为k的记录放入第k个箱子;收集:按序号将非空的连接。数字是有范围的,均由0-9这十个数字组成,则只需设置十个箱子,相继按个、十、百…进行排序。注:算法思路及详细过程可参考后续的示例和代码及代码流程图!6.1.2 算法示例6.1.3 算法代码//基数排序算法void RadixSort(SqList &L){ int len = L.lengt原创 2020-08-17 22:45:03 · 194 阅读 · 0 评论 -
[排序/C++]5. 归并排序
5. 归并排序5.1.1 算法分析和思路基本思想采用分治法(Divide and Conquer)的一个典型应用将两个或两个以上的有序子序列归并为一个有序序列。把长度为n的输入序列分成两个长度为n/2的子序列;对这两个子序列分别采用归并排序;将两个排序好的子序列合并成一个最终的排序序列。2-路归并排序在内部排序中,通常采用的是2-路归并排序将两个位置相邻的有序子序列L[l…m]和L[m+1…n]归并为一个有序序列L[l…n],即将两个有序子序列归并成一个有序序列5.1.原创 2020-08-17 22:38:47 · 207 阅读 · 0 评论 -
[排序/C++]4. 选择排序(简单选择排序、堆排序)
4.1 简单选择排序4.1.1 算法分析和思路基本思想:在待排序的数据中选出最大(小)的元素放在其最终的位置。基本操作:首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换;再通过n-2次关键字比较,从n-1个记录中找出关键字次小的记录,将它与第二个记录交换;重复上述操作,共进行n-1趟排序后,排序结束。4.1.2 算法代码//简单选择排序算法void SelectSort(SqList &L){ for(int i = 1;原创 2020-08-17 22:30:09 · 330 阅读 · 0 评论 -
[排序/C++]3.交换排序(冒泡排序、快速排序)
3. 交换排序基本思想:两两比较,如果发生逆序则交换,直到所有记录都排好序为止。常见的交换排序方法:冒泡排序 O(n^2)快速排序 O(nlogn)3.1 冒泡排序——基于简单的交换思想3.1.1 算法分析和思路每趟不断将记录两两比较,并按**“前小后大”**规则排序。Q:为什么称之为冒泡?A:把数据元素竖着放,观察排序的整个过程就会发现,“轻”的元素往上浮,“重”的元素往下沉。就像气泡,轻的向上冒,重的向下沉。每一趟增加一个有序元素,最大的元素到了最后面,原创 2020-08-17 14:49:11 · 389 阅读 · 0 评论 -
[排序/C++]2. 插入排序(直接插入排序、二分插入排序、希尔排序)
2. 插入排序基本思想:每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的合适位置上,直到对象全部插入为止。即边插入边排序,保证子序列中随时都是排好序的基本操作:有序插入在有序序列中插入一个元素,保持序列有序,有序长度不断增加。在插入a[i]前,数组a的前半段(a[0]a[i-1])是有序**,**后半段(a[i]a[n-1])是停留于输入次序的无序段。插入a[i]使a[0]~a[i-1]有序,也就是要为a[i]找到有序位置j(0<=j<=i),原创 2020-08-17 13:38:51 · 459 阅读 · 0 评论 -
[排序/C++]1. 排序基础知识和总结
1. 排序基础知识排序:将无序序列排成一个有序序列(由小到大 或 由大到小)按 主要操作,排序方法可分为:比较排序:用比较的方法插入排序、交换排序、选择排序、归并排序基数排序:不比较元素的大小,仅仅根据元素本身的取值确定其有序位置。主要学习:插入排序:直接插入排序、二分插入排序、希尔排序交换排序:冒泡排序、快速排序选择排序:简单选择排序、堆排序归并排序:2-路归并排序基数排序存储结构——记录序列以顺序表存储:#define MAXSIZE 20 //设记原创 2020-08-16 00:10:24 · 256 阅读 · 1 评论