
数据结构与算法
Dumbking
这个作者很懒,什么都没留下…
展开
-
二叉树的先序、中序、后序遍历
二叉树的先序、中序、后序遍历1.前序遍历前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。若二叉树为空则结束返回,否则:(1)访问根结点;(2)前序遍历左子树;(3)前序遍历右子树 ;需要注意的是:遍历左右子树时仍然采用前序遍历方法。可以看出前序遍历后,遍历结果为:6312549782.中序遍历中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树原创 2021-01-21 22:33:05 · 11256 阅读 · 0 评论 -
归并排序
归并排序/*递归实现*/#include <stdio.h>#define MAXSIZE 10// 实现归并,并把最后的结果存放到list1里void merging(int *list1, int list1_size, int *list2, int list2_size){ int i, j, k, m; int temp[MAXSIZE]; i = j = k = 0; while( i < list1_size && j < lis原创 2021-01-04 01:22:54 · 118 阅读 · 0 评论 -
堆排序
堆排序堆排序 堆排序的由来还得说到简单选择排序,由简单选择排序中的在进行剩余的n -2个数据比较时若能利用前n-1次比较的所得信息,则可以减少以后各趟排序的比较次数,由此联想出锦标赛排序也就是树形排序,但是树形排序的辅助存储空间较多,和“最大值”进行比较多余的比较等缺点,因此,在1964年威洛姆斯提出了堆排序,堆排序灵活的应用了最堆的特性来达到选择的目的。堆排序只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。要进行堆排序首先我们要先建一个最大(小)堆,(这里关于如何建最堆以下代码原创 2021-01-04 01:22:29 · 1200 阅读 · 0 评论 -
希尔排序
希尔排序希尔排序 希尔排序的提出是对直接插入排序的进一步优化,直接插入排序插入排序在对几乎已经排好序的数据操作时,效率高,即可达到线性排序的效率但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位,所以在1959年D.L.Shell正式提出了shell算法,我觉得这给当时的人指明了一个方向,开辟了灵感的源泉,因为shell排序是第一个突破了O(n^2 ) 时间复杂度的排序算法,因为在1959年之前的相当长的一段时间里,各种各样的排序算法无论是怎么设计,都始终无法突破O(n^2), 在当时直接插原创 2021-01-04 01:21:53 · 432 阅读 · 0 评论 -
直接插入排序
直接插入排序/*插入排序是把一个记录插入到已排序的有序序列中,使整个序列在插入该记录后仍然有序。插入排序中较简单的种方法是直接插入排序,其插入位置的确定方法是将待插入的记录与有序区中的各记录自右向左依次比较其关键字值的大小。*//*基本有序,记录数少*//*基本思想: 每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序 的一组元素的合适位置上去,直到元素全部插完为止。直接插入排序; 当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1原创 2021-01-04 01:21:10 · 212 阅读 · 0 评论 -
选择排序
选择排序/*工作原理是每一次从无序组的数据元素中选出最小(或最大)的一个元素,存放在无序组的起始位置,无序组元素减少,有序组元素增加,直到全部待排序的数据元素排完。*/#include <stdio.h>void SelectSort(int k[], int n){ int i, j, min, temp, count1=0, count2=0; for( i=0; i < n-1; i++ ) { min = i; for( j=i+1; j <原创 2021-01-04 01:20:41 · 117 阅读 · 0 评论 -
冒泡排序
冒泡排序**冒泡排序的基本思想:**两两相邻记录的关键字,如果反序则交换,直到没有反序的记录为止!冒泡排序的要点:1、两两注意是相邻的两个元素的意思2、如果有n个元素需要比较n-1次,每一轮减少1次比较3、既然叫冒泡排序,那就是从下往上两两比较,所以看上去就跟泡泡往上冒一样。/*非正宗版本的冒泡排序*/#include <stdio.h>void BubbleSort(int k[], int n){ int i, j, temp, count1=0, count2=0;原创 2021-01-04 01:19:54 · 343 阅读 · 1 评论 -
线性表的表示与实现问题
线性表的表示与实现问题1、线性表的背景在计算机领域中,线性表是最常见的一种抽象数据类型。线性表可持有相同类型的数据元素(可以是相同的元素也是不同的元素),其中的每个数据元素都有一个唯一的位序号(≥0)与其相对应,因此,线性表中的数据元素按位序号排成了一个线性的序列,如图1所示。图1 线性表的概念结构图从图中可以准确了解到,线性表的位序号只能在一个方向上增长或减少。线性表最大的特点在于,可...原创 2020-02-05 18:39:57 · 514 阅读 · 0 评论