数据结构与算法
数据结构和算法的一些原理以及C++实现
Everglow—
这个作者很懒,什么都没留下…
展开
-
二分查找算法总结
本文参考《labuladong的算法小抄》二分查找适用于在一个排序数组中找到给定的数,遍历的复杂度为O(n), 二分的复杂度为O(logn),二分的场景有以下三种:寻找一个数寻找左侧边界寻找右侧边界!!关于搜索区间[left, right)和[left, right] !!开区间的话就像STL中的迭代器(指向最后一个元素的下一个元素),因此right=nums.size(), 对于mid的赋值同理,搜索过就要缩小区间(因此left向右移动要mid+1(左闭), right向左移动不用变(右原创 2021-02-27 11:07:52 · 166 阅读 · 0 评论 -
二叉树的遍历
给定一棵二叉树:递归模式的二叉树遍历:原创 2020-12-30 18:46:44 · 132 阅读 · 0 评论 -
队列结构和栈结构的相互转化
题目:1.用队列结构实现栈结构2.用栈结构实现队列结构思路:1.队列->栈:准备两个队列data help入栈:data入队,help不动出栈:除了最后一个数据,data的数据依次放入help中,data.pop() 之后help data交换返回栈顶元素:直接return data的最后一个元素即可#include<iostream>#include<queue>using namespace std;class QueuetoStack{publ原创 2020-06-03 21:24:31 · 104 阅读 · 0 评论 -
特殊栈:实现栈的基本功能并能返回栈中最小元素
思路:准备两个栈,一个Data,一个MinData正常压栈,用于实现栈的基本功能Min一定要和Data元素个数相同,但是要保证一直压入的是栈中的最小元素#include<iostream>#include<stack>using namespace std;class SpecialStack{public: stack<int> Data; stack<int> Min; void push(int data) {原创 2020-05-29 14:55:50 · 121 阅读 · 0 评论 -
C++实现桶排序(BucketSort)
思想:桶排序是非基于比较的排序,实际上不常用,刷题时要有桶的思想。时间空间复杂度都是O(n)桶可以统计词频#include<iostream>#include<vector>using namespace std;void BucketSort(vector<int>& arr){ vector<int> bucket(10, 0); int x = 0; for (int i = 0; i < arr.size(); i++原创 2020-05-29 12:34:59 · 311 阅读 · 0 评论 -
快速排序详解(quickSort)
思路:(1)经典快排:以最后一个元素为基准数,使用两个指针从左右两侧向中间遍历数组,分别找大于基准数的元素和小于基准数的元素进行交换(结果每次排好一个基准数的位置),递归进行快排(注意:递归一定要有递归停止条件)(2)随机快排:将数组中任意一个元素与数组最后一个元素交换作为基准数进行快排)(优点:常数项低)(3)进一步优化:引入荷兰国旗问题,这样一次能排好一片...原创 2020-05-20 10:43:53 · 273 阅读 · 0 评论 -
荷兰国旗问题:快速排序的优化手段
问题描述:给定一个数组arr以及一个固定值value,将arr中小于value放左边,等于放中间,大于放右边思路:划分成less区域和more区域,用三个指针less,current,more进行遍历交换#include<iostream>using namespace std;//先定义交换函数,CPP是顺序编译void swap(int arr[], int i, int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = t原创 2020-05-17 20:56:31 · 504 阅读 · 0 评论 -
C++实现归并排序(Mergesort)
将数组二分,运用递归的思想将两部分分别mergesort,然后进行merge过程(建立辅助数组,分别用两个指针遍历两部分,填入辅助数组)#include<iostream>#include<vector>using namespace std;class Solution{public: vector<int>v = {}; void merge_sort() { mergesort(v, 0, v.size() - 1); } void me原创 2020-05-11 13:39:27 · 272 阅读 · 0 评论 -
C++实现插入排序(Insertion Sort)
基本思路类似扑克牌理排,一张一张插入#include<iostream>#include<vector>using namespace std;class Solution{public: vector<int> v = {}; vector<int> InsertSort() { for(int i=1;i<v.siz...原创 2020-05-07 16:43:29 · 161 阅读 · 0 评论 -
C++实现冒泡排序(Bubble Sort)
#include<iostream>#include<vector>using namespace std;void Bubblesort(vector<int>v){ for (int i = v.size() - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (v[...原创 2020-05-04 11:59:31 · 291 阅读 · 0 评论 -
C++实现选择排序(Selection Sort)
思路:从0~N-1中选最小放在0位置, 从1~N-1中选最小放1位置,依次类推。。。定义最小的索引min_index后遍历数组比较#include<iostream>#include<vector>using namespace std;int SelectionSort(vector<int>v){ for (int i = 0; i < ...原创 2020-05-04 22:24:52 · 156 阅读 · 0 评论