数据结构与算法
TeaIsCold
Java爱好者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序算法---选择排序
算法设计:选择排序算法是在线性表中找到最小的元素,并将其与第一个元素交换,然后在剩余的线性表在找到最小的元素,将其与剩余的线性表的第一个元素交换,一直重复直到线性表只剩下一个元素为止 算法时间复杂度为 O(n^2) 算法时间复杂度分析:对于第一次迭代,比较次数为n-1,第二次为n-2,依次类推,选择排序的时间复杂度 T(n)=(n-1)+c+(n-2)+c+....+2+c+1+c =O(n原创 2017-08-03 12:02:52 · 493 阅读 · 0 评论 -
排序算法---插入排序
算法设计:插入排序重复地将新的元素插入到一个排好序的子线性表中 算法时间复杂度为O(n^2) 算法描述如下:for(int i=1;i<list.length;i++){ 将list[i]插入已经排好序的子线性表中,这样list[0...i]也是排好序的 }算法时间复杂度分析:插入排序算法重复的将一个新的元素插入到一个排好序的部分数组中,直到整个数组排好序。在K次迭代中,为了将一个元素插入到原创 2017-08-03 12:19:58 · 410 阅读 · 0 评论 -
排序算法---冒泡排序
算法设计:冒泡排序算法多次遍历数组,在每次遍历中连续比较相邻的元素,如果元素没有按照顺序排列则互换它们的值,否则,保持不变,较小的值逐渐浮向顶部,较大的值逐渐沉下底部。算法时间复杂度为O(n^2) 时间复杂度分析:在最差情况下,冒泡排序算法需要进行n-1次遍历,第一次要进行n-1次比较,第二次要进行n-2次比较 T(n)=(n-1)+(n-2)+...+2+1 =O(n^2)原创 2017-08-03 12:30:22 · 304 阅读 · 0 评论 -
排序算法---归并排序
算法设计:归并排序算法将数组分为两半,对每部分递归的应用归并排序。在两部分都排好序后,对他们进行归并。算法时间复杂度为O(nlogn) public static void mergeSort(int[] list){ if(list.length>1){ mergeSort(list[0....list.length/2]); mergeSort(list[原创 2017-08-03 12:50:40 · 318 阅读 · 0 评论 -
排序算法---快速排序
算法设计:该算法在数组中选择一个称为主元的元素,将数组分为两部分,使得第一部分元素都小于或等于主元,第二部分都大于主元。然后对两个部分递归的应用快速排序。快速排序算法时间复杂度为 O(nlogn) 实例分析:初始数组: 5,2,9,3,8,4,0,1,6,7 主元: 5 初始数组被分区: 4,2,1,3,0,5,8,9,6,7 a) 4,2,1,3,0 b) 8,原创 2017-08-03 13:09:22 · 475 阅读 · 0 评论 -
排序算法---外部排序
算法设计:可以使用外部排序对大容量数据进行排序。数据量过大,存储于外部文件,数据不能完全加载到内存中。 1.从文件中读取一固定数目的数据到数组,对数组排序,将排好序的数组作为一个数据段输出到一个临时文件,重复上述过程,直到源文件中数据读取完 2.将存储了数据段的文件中一般的数据段复制到一个临时文件,然后对着两个文件的数据段归并排序,每两个数据段归并形成一个大的数据段存储于一个文件中,重复2,直到只有原创 2017-08-03 13:46:52 · 1592 阅读 · 0 评论 -
排序算法---堆排序
算法设计:堆排序使用的是二叉堆。它首先将所有元素添加到一个堆上,然后不断移除最大元素以获得一个排好序的线性表。算法时间复杂度为O(nlogn) 二叉堆: *形状属性:一棵完全二叉树 *堆属性:每个节点大于或等于它的任意一个孩子 代码实现:实现二叉堆: public class Heap<E extends Comparable<E>> { private ArrayList<原创 2017-08-03 13:22:53 · 327 阅读 · 0 评论
分享