
算法与数据结构
RengarLee
这个作者很懒,什么都没留下…
展开
-
堆排序
堆排序根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆。①建堆,建堆是不断调整堆的过程,从len/2处开始调整,一直到第一个节点,此处len是堆中元素的个数。建堆的过程是线性的过程,从len/2到0处一直调用调整堆的过程,相当于o(h1)+o(h2)…+o(hlen/2) 其中h表示节点的深度,len/2表示节点的个数,这是一个求和的过程,结果是转载 2017-05-22 16:29:53 · 350 阅读 · 0 评论 -
选择排序
选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。# include void SelectionSort(int *a, int n){ int i, j, min, temp; for(int i = 0 ;原创 2017-05-22 09:49:05 · 333 阅读 · 0 评论 -
2-路插入排序
2-路插入排序2路插入排序算法是在直接插入排序算法的基础上增加了一个辅助数组,其目的是减少排序过程中的移动次数,需要增加n个记录的辅助空间。并记录辅助空间内最大元素和最小元素的位置。将待插入的元素与最大元素和最小元素继续比较,从而决定然后排序;# include void TwoInsertSort(int *Array, int Length){ int TempArra原创 2017-05-22 09:35:03 · 472 阅读 · 0 评论 -
基数排序
基数排序实现原理:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。实验数据:138,47, 65, 97, 13, 27, 49,76 第一次1.将数据分到1-9中2得到结果 其中 newtemp[i+1] = newtemp[i]原创 2017-05-18 19:38:11 · 277 阅读 · 0 评论 -
归并排序
递归排序基本思想:将两个或两个以上的的有序表组合成一个新的有序表# include # include void Merge(int *a, int low, int mid, int high){ //将有序的a[low-mid]和有序的a[mid+1,high]归并成有序的a[low-high] int i = low, j = mid+1, k = 0; int原创 2017-05-18 17:18:31 · 339 阅读 · 0 评论 -
快速排序
快速排序快速排序(Quicksort)是对冒泡排序的一种改进。基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。实验数据: 49, 38, 65, 97, 76, 13, 27, 49下列表格是程序第原创 2017-05-15 21:17:25 · 288 阅读 · 0 评论 -
直接插入排序
直接插入排序基本操作:将一个记录插入到已排好序的有序表中,从而得到一个新的记录数+1的有序表思路演示原始数据 5 4 1 2 3第一次 4 5 1 2 3第二次 1 4 5 2 3第三次 1 2 4 5 3第四次 1 2 3 4 5# include void InsertSort(int *a, int n){ //对数组进行直接插入排序 排序原创 2017-05-09 21:57:51 · 298 阅读 · 0 评论 -
折半插入排序
折半插入排序基本思路:由于插入排序的基本操作是在一个有序表中进行查找与插入,其中的查找操作可以利用折半查找来实现# include //折半查找 返回目标数据要插入的下标 int HalfSear(int *a, int n, int num){ int frist = 0; int final = n-1; int mid; while(frist <= final){原创 2017-05-09 21:37:23 · 403 阅读 · 0 评论 -
冒泡排序
冒泡排序基本操作: 重复走访要进行排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。直到走访数列的工作中不再 出现交换,也就说明该数列已经排序完成。排序思路:原始数据 5 4 1 2 3第一次排序开始 4 5 1 2 3 4 1 5 2 3原创 2017-05-15 09:11:06 · 319 阅读 · 0 评论 -
希尔排序
希尔排序先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 =1( …# include void HillSort(int *num, int length){ int i, j, temp, gap, t; for(gap原创 2017-05-22 19:09:23 · 315 阅读 · 0 评论