
数据结构和算法
孙太忙
stay hungry,stay foolish
展开
-
排序算法总结(1)——冒泡排序
升序排列:从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完成排序。代码如下:public class BubbleSort { private long a[]; private int nElemts; publi原创 2016-06-18 18:27:04 · 341 阅读 · 0 评论 -
排序算法总结(2)——选择排序
思路:选择数组中的最左边的元素,下标为0,同时标记此元素为最小元素。将第二个元素与此元素比较,若小于最小元素,则它取而代之成为最小元素。后边的元素以同样的道理进行比较和标记,在完全遍历以后,将具有最小标记的元素和第0个元素进行交换。第二此遍历的时候则从第二个位置开始进行比较。代码如下:public class SelectSort { public long[] a;原创 2016-06-18 23:00:46 · 234 阅读 · 0 评论 -
排序算法总结(3)——插入排序
插入排序是局部有序的,数组中有一个元素被作为标记元素,标记元素的左侧是有序的,右侧是无序的,即标记元素是无序部分的第一个元素。此时要求被标记元素出列,且和有序部分的第一个元素进行比较,若标记元素小于有序部分的最大元素,则最大元素右移到标记元素的位置,标记元素和次大元素继续比较,直到标记元素大于有序部分的某个元素,此时标记元素在此位置入列,即插入。代码如下:public clas原创 2016-06-18 23:35:25 · 576 阅读 · 0 评论 -
排序算法总结(4)——归并排序
归并排序的思想是把一个数组分成两半,排序每一半,然后把数组的两半归并成一个有序数组。运用递归的方法,把每一半都分成两个四分之一,对每个四分之一排序,然后归并成有序的一半。以此类推,反复的分割数组,直到子数组只含有一个数据项。归并排序的一个缺点是它需要在存储器中申请一个大小等于被排序的数组,将排序后的数组存放到新申请的数组当中。若初始数组几乎沾满整个存储器,那么归并排序将不能工作。原创 2016-06-19 03:22:40 · 364 阅读 · 0 评论 -
排序算法总结(5)——希尔排序
希尔排序在插入排序的基础上进行了改进,由于插入排序需要移动即复制数组中的很多元素,降低了执行效率。希尔排序不必一个一个地移动中间的数据项,通过n-增量排序的方式,改进了执行效率。通过加大插入排序中元素之间的间隔,在这些有间隔的元素中进行插入排序,从而使数据项能大跨度地移动。当这些数据项排过一趟后,再减小数据项的间隔。数据项之间的间隔称为增量,用h表示。间隔的递归表达式为h=3*h+1.原创 2016-06-19 04:24:08 · 369 阅读 · 0 评论 -
二分查找和递归的二分查找
在一个有序的数组中查找给定的数据项,把数组冲中间分成两半,然后看要查找的数据项在数组的哪一半,再次折半查找。代码如下:public int find(long searchKey){ int lowerBound=0; int upperBound=nElmets-1; int curIn; while(true){ curIn=(lowerBound+原创 2016-06-19 17:46:33 · 541 阅读 · 0 评论 -
排序算法总结(6)——快速排序
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。选择中最后一个元素作为枢纽判断,将整个数组进行划分,划分完成后交换枢纽和右边子数组最左端的元素,即使枢纽元素位于最终的位置。代码如下:public class QuickSort原创 2016-06-19 17:15:44 · 305 阅读 · 0 评论 -
链表的基本操
class Link{ public int iData; public Link next; public Link(int data){ iData=data; } public void display(){ System.out.print(iData+" "); }} class LinkList{ private Link原创 2016-06-20 04:55:58 · 348 阅读 · 0 评论