
数据结构与算法
北枳ill
积极向上,多吃不胖
展开
-
有n个人围成一圈,从1开始顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
有n个人围成一圈,从1开始顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。/*有n个人围成一圈,从1开始顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。*/ #include<iostream>using namespace std;int main(){ int n,k=1; cout<<"请输入人数:"; cin>>n;//有n个人 int原创 2022-03-17 14:44:06 · 1131 阅读 · 0 评论 -
归并排序,快速排序
归并排序归并排序使用的就是分治思想。如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。归并排序的时间复杂度任何情况下都是 O(nlogn),但是,归并排序并没有像快排那样应用广泛,这是因为它有一个致命的“弱点”,那就是归并排序不是原地排序算法。在任意时刻,CPU 只会有一个函数在执行,也就只会有一个临时的内存空间在使用。临时内存空间最大也不会超过 n 个数据的大小,所以空间复杂度是 O(n)。#include<原创 2020-08-18 14:13:33 · 138 阅读 · 0 评论 -
冒泡排序,插入排序,选择排序笔记
冒泡排序算法原理1)冒泡排序只会操作相邻的两个数据。2)对相邻两个数据进行比较,看是否满足大小关系要求,若不满足让它俩互换。3)一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。4)优化:若某次冒泡不存在数据交换,则说明已经达到完全有序,所以终止冒泡。void bubbleSort(int a[],int n){//冒泡排序 if(n <= 1)return; for(int i = 0;i < n;i++){ // 提前退出冒泡循环的标志原创 2020-08-17 11:46:58 · 118 阅读 · 0 评论 -
链表笔记
什么是链表?1.和数组一样,链表也是一种线性表。链表是逻辑上连续,但物理上不一定连续。2.从内存结构来看,链表的内存结构可以是不连续的内存空间,可以是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。我们把这个记录下个结点地址的指针叫作后继指针 next。链表的特点1.插入、删除数据时间复杂度O(1),随机访问时间复杂度O(n)(需要从链头至链尾进行遍历)。2.和数原创 2020-08-13 12:41:46 · 216 阅读 · 0 评论 -
复杂度分析笔记
复杂度分析笔记(时间复杂度、空间复杂度)一、什么是复杂度分析?数据结构和算法解决的是如何让计算机更快时间、更省空间的问题。因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。 复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系,所以又称渐进时间复杂度、渐进空间复杂度二、为什么要进行复杂度分析?和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。我们可以不用具体的测试数据来测试原创 2020-08-10 21:42:23 · 223 阅读 · 0 评论