数据结构与算法
数据结构与算法
英特纳雄耐尔就一定会实现
这个作者很懒,什么都没留下…
展开
-
快速排序实现与优化(单路、二路、三路)
一.快速排序的思想快速排序的基本思路是在每一趟排序中,选择一个标定值,将小于标定值的元素放在该元素前面,大于标定值的元素放在该元素后面,即每一趟确定了一个元素的位置。然后递归执行标定元素左右两侧的区间。二.快速排序的实现与优化1.基础的快速排序实现(单路快速排序)#include"iostream"#include"time.h"using namespace std;temp...原创 2020-04-10 16:30:22 · 245 阅读 · 0 评论 -
求逆序对个数问题
问题:求一组无序的元素中逆序对的个数例:5 4 3 2 1 (5,4) (5,3)(5,2)—(3,2)(3,1)(2,1)传统解决思路双层for循环 时间复杂度O(n^2)//类似于选择排序void test(int *arr,int n){ int count=0;//计数 for(int i=0;i<n-1;i++){ int flag = arr[i]; fo...原创 2020-03-17 00:00:54 · 277 阅读 · 0 评论 -
并查集算法解决亲戚问题
题目:亲戚若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易。 现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 我们规定:如果x和y是亲戚,y和z是亲戚,那么x和z也是亲戚;如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。输入第一行:三个整数n,m,p,(n≤5000,m≤5000,p≤5000),分别表示有n个人,m个亲戚关系,询问p对亲戚关系。...原创 2020-03-16 23:10:48 · 641 阅读 · 0 评论 -
Tom数
1.问题描述正整数的各位数字之和称为Tom数。求输入n, n≤231−1的Tom数!2.输入每行一个整数n ,n≤231−1.3.输出每行一个输出,对应该数的各位数之和.样例输入:123455612382样例输出:1517104.解题import java.util.*;public class Main { public static void main(St...原创 2019-06-19 22:35:23 · 696 阅读 · 0 评论 -
AC了吗
1.题目描述小明遇到了一件很郁闷的事。在ACM题库中,题目编号含有2,3,5以外的质因子的题目小明都没有通过,反之则全部通过。2.输入输入有多组数据。每组数据一行,1个正整数(不大于1000000000),代表题目号。3.输出对应每组数据,如果小明通过了这道题目,则输出Accepted,否则输出Wrong。样例输入:15204757样例输出:AcceptedAccep...原创 2019-06-19 22:04:25 · 240 阅读 · 0 评论 -
不带头结点的单链表的就地逆置算法
typedef struct node{ struct node *next; int data;}*LinkList,NODE;LinkList reverseList(LinkList head) LinkList p,q,l; q=head; L=head; p->next=NULL; while(L){ L=L->next; q->next=p...原创 2019-06-18 23:13:01 · 8025 阅读 · 6 评论 -
堆的实现以及堆排序(最大堆,最小堆)
1.堆的概念堆是一种特殊的数据结构,相当于数组实现的一颗二叉树,但是和一般的二叉搜索树不同1.堆分为最大堆(父结点不小于其孩子结点)和最小堆(父结点不大于其孩子结点),分别表示最大堆和最小堆只是>和 < 的关系template<typename T>class ...原创 2020-04-02 08:51:41 · 776 阅读 · 0 评论 -
归并排序的递归实现(自顶向下)以及迭代法(自底向上)
写完了时间复杂度O(n^2)的几大经典排序算法,接下来开始写时间复杂度O(nlogn)的排序算法这篇文章先介绍归并排序的递归实现以及迭代实现1.概念归并排序采用分治的思想,将一组无序的数据平均分为多个小块,分到极限时,每一块仅包含1个数据,此时每块都是有序的。接下来进行归并操作。下图为维基百科gif图2.递归实现template<typename T>void __mer...原创 2020-03-06 17:17:12 · 825 阅读 · 0 评论 -
数据结构之插入排序及希尔排序
上文介绍了时间复杂度o(n^2)的3种常见排序算法希尔排序就是基本插入排序实现的该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的。根据增量选定的不同 希尔...原创 2020-03-01 20:50:14 · 86 阅读 · 0 评论 -
数据结构之时间复杂度o(n^2)的排序算法
时间复杂度o(n^2)的排序算法包括选择排序、插入排序、冒泡排序c++语法实现如下:1.选择排序template<typename T>void selectionSort(T arr[],int n){ for(int i=0;i<n;i++){ int minIndex = i; for(int j=i+1;j<n;j++...原创 2020-02-29 11:06:01 · 1261 阅读 · 0 评论 -
数据结构之顺序表
c语言实现顺序表的基本功能1.顺序表的描述#define maxsize 30typedef int DataType;typedef struct{ int length; DataType data[maxsize];}Sqlist;2.初始化void createList(Sqlist *L){ int i; printf("请输入顺序表初始化长度:"); scan...原创 2019-06-19 21:31:38 · 147 阅读 · 0 评论 -
数据结构之线性表篇
数据结构之线性表篇一.线性表的链式存储1. 结点的描述typedef struct node{ int data; struct node *next;}NODE,*Linklist;//等价于 define NODE *Linklist;2.单链表的创建LinkList createList(){ LinkList head;//生成头结点 head...原创 2019-06-12 21:12:51 · 172 阅读 · 0 评论