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

软件开发小程序制作系统集成与运维空间租用硬件开发视频监控技术咨询与支持——联系电话:0311-88999002/88999003

首页 / 操作系统 / Linux

冒泡排序的三种实现

冒泡排序的三种实现

冒泡排序是非常容易理解和实现,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。按照定义很容易写出代码://冒泡排序1void BubbleSort1(int a[], int n){ int i, j; for ...
直接插入排序的三种实现

直接插入排序的三种实现

直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。3. i++并重复第二步直到i==n-1。排序完成。下面给出严格...
希尔排序的实现

希尔排序的实现

希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。...
直接选择排序及交换二个数据的正确实现

直接选择排序及交换二个数据的正确实现

直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。设数组为a[0…n-1]。1. 初始时,数组全为无序区为a[0..n-1]。令i=02. 在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]交换。交换之后a[0…i]就形成了一个有序区。3. ...
归并排序的实现

归并排序的实现

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。//将有序数组a[]和b[]合并到c[]中void MemeryArray(int a[], int n, int b[], int m...
快速排序 快速搞定

快速排序 快速搞定

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序,快速搞定。快速排序是C.R.A.Hoare于1962年提出的一...
堆与堆排序

堆与堆排序

堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。下图...
C++ 类的静态成员详细讲解

C++ 类的静态成员详细讲解

在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即<类名>::<静态成员名>。在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个...
快速算法实现----挖坑填数

快速算法实现----挖坑填数

快速排序作为时间复杂度为o(nlogn)的算法,在实际中经常用到。下面简单的讲解一下快速排序算法的实现思路。看看 http://www.linuxidc.com/Linux/2014-09/107317.htm思路写的非常好。挖坑填数,非常形象。下面简单的介绍一下。快速排序用到时分治法的思想。主要可以分为以下的三步。1、选定一个数作为基数2、将大于这个的基数的数全放在右边,小于这个基数的数全部放在左边3、对左右区间中的数重复1、2步骤,直到区间中只有一个数...
二路归并排序C++实现

二路归并排序C++实现

/*归并排序的基本操作是将两个或两个以上的记录有序序列归并为一个有序序列。最简单的情况是,只含一个记录的序列显然是个有序序列,经过"逐趟归并"使整个序列中的有序子序列的长度逐趟增大,直至整个记录序列为有序序列止。二路归并排序则是归并排序中的一种最简单的情况,它的基本操作是将两个相邻的有序子序列"归并"为一个有序序列,如右侧所示。这个操作对顺序表而言是极其容易实现的,只要依关键字从小到大进行"复制"即可,如下算法所示。*/#include <iostr...
Java之生成JAR包

Java之生成JAR包

Java编写的application程序是否能够最终形成一个类似于exe一样的可执行文件,难道就只能用命令行运行?通常有两种,一种是制作一个可执行的JAR文件包,然后就可以像.chm文档一样双击运行了;而另一种是使用JET来进行编译。但是JET是要用钱买的,而且据说JET也不是能把所有的Java程序都编译成执行文件,性能也要打些折扣。所以,使用制作可执行JAR 文件包的方法就是最佳选择了,何况它还能保持Java的跨平台特性。下面就来看看什么是JAR文件包吧...
Java之static关键字

Java之static关键字

介绍:1、在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。2、用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static成员。(静态方法不再是针对于某个对象调用,所以不能访问非静态成员)3、可以通过对象引用或类名(不需要实例化)访问静态成员。注:静态变量多用于计数功能。(单例模式之类的经常用...
Java之this关键字

Java之this关键字

this使用范围 1、在类的方法定义中使用的this关键字代表调用该方法对象的引用。2、当必须指出当前使用方法的对象是谁时,要使用关键字this。3、有时使用this可以处理方法中成员变量和参数重名的情况。4、this可以看做是一个变量,它的值是当前对象的引用。注:this一般出现在方法中,当方法没有被调用时。并不知道this指向那个具体的对象。当某个对象调用有this的方法时,this就指向调用这个方法的对象。程序code:public class T...
AngularJS 中的通信(发布订阅模式)

AngularJS 中的通信(发布订阅模式)

现在几乎满世界的人都在问! 外面有人么? 这里是 USS AngularJS, 我们遇到麻烦了,我们的服务讲得是克灵贡语(Klingon) 而我们的控制器不能同它们的Ferengi 指令通信了. 有人能帮助我们么!我已经不知道有多少次遇到这种有关什么才是AngularJS里面的组件通信的最佳方式这样的问题了. 很多时候答案都会是为此使用 $rootScope 对象去向任何想要收听的人广播$broadcast出一条消息. 然而,那还真不是做这件事的最佳方式....
AngularJS 项目构建中的组织结构

AngularJS 项目构建中的组织结构

前几天刚刚把项目的组织结构进行了一次重构,这是前端项目至今第二次进行组织结构上大的变化,也是一个"folder by type"到"folder by feature"的过程.为什么有这个过程?因为感觉到项目的日益庞大,每次修改一个地方我可能要打开三四个文件,比如说一个页面上的哪里要修改.那么首先是页面的HTML,然后是Controller,Less,对应接口的service文件等等.整个项目是我一手构建的可能还不会出问题,只是找的时候要回想一下对应的文件...
AngularJS 中得 scope 作用域梳理

AngularJS 中得 scope 作用域梳理

$scope 的使用贯穿整个 AngularJS App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了 $scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 $scope,同样的 $scope 发生改变时也会立刻重新渲染视图.有了 $scope 这样一个桥梁,应用的业务代码可以都在 controller 中,而数据都存放在controller 的 $scope 中.$rootScopeAngularJS 应用...
AngularJS应用技巧分享

AngularJS应用技巧分享

angular的核心思想是通过数据驱动一切,其他东西都是数据的延伸.套用Javascript一切皆对象的思想,在angular中可以说一切皆数据. ” 关于项目构建 (1) requirejs以及Yeoman 在刚开始接触或者使用Angular的时候,总会疑惑与类似的问题,我实践的答案是不需要requirejs或者Yeoman.前者不使用,因为angular本身有module的实现.后者是因为Angular组织结构以及项目构建完全不必要弄得...
Android开发中的多线程

Android开发中的多线程

多线程案例——计时器这个案例中,屏幕启动之后,进入如图所示的界面。屏幕上有一个文本框用于显示逝去的时间,此外还有一个“停止计时”按钮。案例的用例图如图所示。能够在屏幕上“实时地显示”时间的流逝,单线程程序是无法实现的,必须要多线程程序才可以实现,即便有些计算机语言可以通过封装好的类实现这一功能,但从本质上讲这些封装好的类就是封装了一个线程。综上所述,完成本案例用到的知识及技术如下: ...
Java 创建用户异常类、将异常一直向上抛、 throw和throws的区别

Java 创建用户异常类、将异常一直向上抛、 throw和throws的区别

如果java提供的系统异常类型不能满足程序设计的需求,那么可以设计自己的异常类型。从java异常类的结构层次可以看出,java类型的公共父类为Throwable.在程序运行中可能出现俩种问题:一种是由硬件系统或JVM导致的故障,java定义该故障为Error,这类问题是用户程序不能够处理的;另外一种问题是程序运行错误,java定义为Exception,这种情况下,可以通过程序设计调整来实现异常处理。因此,用户定义的异常类型必须是Throwable的直接或间...
<< 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 >>