算法
bakaSuc
大一学生
展开
-
C语言 计数排序算法
计数排序的基本思想:对每一个输入元素 x ,确定小于 x 的元素个数。利用这一信息,就可以直接把 x 放在输出数组中对应的位置上。例如,假如有 17 个元素小于 x,则 x 就应该放在第 18 个输出位置上。当数组中有相同的元素时,要略微修改这个方案,因为两个元素不能放在同一个位置上。我们把计数排序称为非比较排序,因为计数排序的实现完全不依赖于任何元素之间的大小关系。与计数排序相比,冒泡排序则是一种典型的比较排序。计数排序牺牲了空间复杂度,它必须在内存中开辟新的空间来存放排序后的值,并且返回指向这个原创 2021-12-01 20:07:50 · 1058 阅读 · 0 评论 -
C语言 堆排序算法
各个函数的功能:maxHeapify 的参数为数组 a 和需要操作的下标 i。在调用 maxHeapify 的时候,需要确保根节点为 LEFT(i) 和 RIGHT(i) 的二叉树都是最大堆。若 a[i] 小于其孩子,则让 a[i] 的值在最大堆中逐级下降,从而使得以下标 i 为根节点的子树遵循最大堆的性质。若 a[i] 大于其孩子,那么无需进行任何操作。 buildMaxHeap 的参数为数组 a 和数组长度 length。不难知道数组 a[length/2, length-1] 中的元素都是树的.原创 2021-11-30 18:59:31 · 959 阅读 · 0 评论 -
C语言 分治法求解最大子数组
数组A[low, high]的任何连续子数组A[i, j]所处的位置必然是以下三种情况之一:完全位于子数组A[low, mid]中,因此low≤i≤j≤mid。 完全位于子数组A[mid+1, high]中,因此mid<i≤j≤high。 跨越了中点,因此low≤i≤mid<j≤high。我们可以利用分治法递归地求解A[low, mid]和A[mid+1, high]的最大子数组,因为这两个子问题仍是最大子数组问题,只是规模更小。因此,剩下的全部工作就是寻找跨越中点的最大子数组,然后.原创 2021-11-29 14:30:46 · 1328 阅读 · 0 评论 -
C语言 归并排序算法
归并排序算法完全遵循分治模式。直观上其操作如下:分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列。解决:使用归并排序递归地排序两个子序列。合并:合并两个已排列的子序列以产生已排序的答案。随着算法自底向上地推进,待合并的已排好序的各序列长度不断增加,最后全部合并成等于原序列长度的一个新的已排列的序列。// 归并排序// low, mid, high 均为数组下标#include <stdio.h>#include <stdlib.h>#d原创 2021-11-28 10:39:40 · 942 阅读 · 0 评论