Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

排序算法总结之归并排序

排序算法总结之归并排序

一,归并排序介绍归并排序是一个典型的基于分治的递归算法。它不断地将原数组分成大小相等的两个子数组(可能相差1),最终当划分的子数组大小为1时(下面代码第17行left小于right不成立时) ,将划分的有序子数组合并成一个更大的有序数组。为什么是有序子数组???归并排序的递归公式:T(N) = 2T(N/2) + O(N)从公式中可以看出:将规模为 N 的原问题分解成两个规模 N/2 的两个子问题;并且,合并这两个子问题的代价是 O(N)---[后面的 +...
排序算法总结之堆排序

排序算法总结之堆排序

一,堆排序介绍堆是一个优先级队列,对于大顶堆而言,堆顶元素的权值最大。将 待排序的数组 建堆,然后不断地删除堆顶元素,就实现了排序。关于堆,参考:数据结构--堆的实现之深入分析http://www.linuxidc.com/Linux/2016-05/131796.htm下面的堆排序算法将数组中的元素从小到大排序,用大顶堆来实现。二,堆排序算法分析现给定了一维数组,需要将数组中的元素使用堆排序。首先,得创建一个堆,可以在这个给定的一维数组上建堆。 对N个元...
数据结构--堆的实现之深入分析

数据结构--堆的实现之深入分析

一,介绍以前在学习堆时,写了两篇文章:数据结构--堆的实现(上)和数据结构--堆的实现(下), 感觉对堆的认识还是不够。本文主要分析数据结构 堆(讨论小顶堆)的基本操作的一些细节,比如 insert(插入)操作 和 deleteMin(删除堆顶元素)操作的实现细节、分析建堆的时间复杂度、堆的优缺点及二叉堆的不足。二,堆的实现分析堆的物理存储结构是一维数组,逻辑存储结构是完全二叉树。堆的基本操作有:insert--向堆中插入一个元素;deleteMin--删...
数据结构--堆的实现(上)

数据结构--堆的实现(上)

1,堆是什么?堆的逻辑结构是一颗完全二叉树,但物理结构是顺序表(一维数组)。同时,此处的堆不要与JAVA内存分配中的堆内存混淆。这里讨论的是数据结构中的堆。参考:计算机中的堆是什么?http://www.linuxidc.com/Linux/2016-05/131799.htm2,数组实现堆的优势及特点由于堆从逻辑上看是一颗完全二叉树,因此可以按照层序遍历的顺序将元素放入一维数组中。注意为了方便,数组的元素存放从索引 1 处开始(不是0)。采用数组来存放就...
数据结构--堆的实现(下)

数据结构--堆的实现(下)

1,堆作为优先级队列的应用对于普通队列而言,具有的性质为FIFO,只要实现在队头删除元素,在队尾插入元素即可。因此,这种队列的优先级可视为按 时间到达 的顺序来衡量优先级的。到达得越早,优先级越高,就优先出队列被调度。更一般地,很多应用不能单纯地按时间的先后来分优先级,比如按CPU占用时间或者其它方式……在这种情形下,使用堆更容易表达优先级队列。2,堆的两个性质:①结构性质--堆从结构上看是一颗完全二叉树。然而,从物理存储上看,...
内存堆和栈的区别

内存堆和栈的区别

在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教,这对于大家学习会有很大帮助。数据结构的栈和堆首先在数据结构...
二叉树链式存储和遍历

二叉树链式存储和遍历

1 二叉树的链式存储1.1 链式存储 顺序存储对空间利用率较低,所以,二叉树一般采用链式存储结构,用一个链表来存储一颗二叉树。二叉链表至少包含3个域:数据域data,左指针域lchild和右指针域rchild,如果再加上一个指向双亲结点的指针就变成了三叉链表。二叉树的链式存储结构如下:/** * 二叉链表结点 * @author cyhe */private class Node{Integer data;Node lchild, rchild;} ...
由浅入深地分析 写时拷贝(Copy On Write)

由浅入深地分析 写时拷贝(Copy On Write)

本文旨在通过对 写时拷贝 的四个方案(Copy On Write)分析,让大家明白写时拷贝的实现及原理。深拷贝效率低,我们可以应引用计数的方式去解决浅拷贝中析构多次的问题。首先要清楚写时拷贝是利用浅拷贝来解决问题!!方案一class String{private: char* _str; int _refCount;};方案一最不靠谱,它将用作计数的整形变量_refCount定义为类的私有成员变量,任何一个对象都有它自己的成员变量_refCount,它...
Linux下的文件查找命令——find

Linux下的文件查找命令——find

Linux下几个常见的文件查找命令:which 查看可执行文件的位置whereis 寻找特定文件,查看文件的位置locate 配合数据库查看文件位置find 实际搜寻硬盘查询文件名称通常情况下find命令并不是很常用,大家都优先使用whereis和locate命令来查找,因为whereis和locate命令都是利用数据库来查找文件所在,并没有实际查询硬盘,所以速度很快,节省时间。但是我们的find命令依然很强大,它的查找条件相当多,对于用其他...
线索二叉树

线索二叉树

1. 基本概念 在链式存储中,发现二叉链表中存在大量的空指针,如果利用这些空指针指向其直接前驱或后继的指针,则可以更方便地运用某些二叉树操作算法。二叉树的线索化,是为了加快查找结点前驱和后继的速度。 在有N个结点的二叉树中,存在N+1个空指针。每个叶结点有2个空指针,度为1的结点有1个空指针,总的空指针为2N0+N1,又有N0=N2+1,所以总的空指针为N0+N1+N2+1=N+1。 二叉树线索化规则:若无左子树,令lchild指向其前驱结点;...
ARM汇编指令集学习笔记

ARM汇编指令集学习笔记

ARM汇编指令集:指令:汇编指令是CPU机器指令的助记符,经过编译后会得到一串1、0组成的机器码,可以由CPU读取执行伪指令:在编译过程中间起作用,用来指导编译过程,经过编译后不会生成机器码***ARM汇编特点1:LDR/STR架构:在RISC架构中,cpu读写内存需要通过CPU内部的寄存器(CISC的CPU可以直接和内存通信)***ARM汇编特点2:8中寻址方式#寄存器寻址 mov r1,r2 把r2里面的内容送到r1里面去(寄存器靠名字找的)#立即寻址...
C# 7去掉了高级模式匹配特性

C# 7去掉了高级模式匹配特性

最初有望在C# 7中出现的高级模式匹配特性已于近日从future分支中排除出去,放入了该语言的下一个版本中。Roslyn的GitHub库已经明确了C# 7模式匹配的变化范围。尤其是问题#10866(“将features/patterns分支分成两个包含/不包含在C# 7中的子特性分支”)和PR #10888(“去掉高级模式匹配特性的证据”)详尽地描述了这一变化的内容。正如InfoQ几周之前的报道,模式匹配会成...
Linux下进度条的编写和实现

Linux下进度条的编写和实现

Linux下实现了一个简单的进度条,主要技术啥的算不上,但有几个需要注意的点首先是回车符,回车符可不是 ,我们可以把 看成是两个动作的合体,分别是,回车和换行,都有自己对应的符号,这利用回车符一直在同一个位置输出造成动态的假象因为没有用到 和换行,但是C语言的printf是行缓冲输出,什么意思呢?就是说不满一行不输出,就是靠 输出的,没有 只好强制把缓冲中的数据输出出来,这就要用到函数fflush()#include<stdio.h> ...
<< 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 >>