算法学习
Ceferr
这个作者很懒,什么都没留下…
展开
-
寻找一个数组的最大子数组(子数组之和最大)
寻找一个数组的最大子数组(子数组之和最大)Max_Crossing_Arr(int a[], int low, int high, int mid)该函数寻找一个跨越中点的最大子数组。Max_Arr(int a[],int low,int high)该函数寻找一个数组的最大子数组:先找左半边的最大子数组,再找右半边最大子数组,再找跨越中点的最大子数组,(其中递归调用自身于寻找左右两边的最大...转载 2019-01-20 15:03:48 · 1665 阅读 · 0 评论 -
堆最大化、将无序数组建立为最大堆、以及堆排序
最大堆化、将无序数组建立为最大堆、以及堆排序最大堆化:参数为指定数组和指定数组下标,寻找该下标数组值的左右子节点,将较小值递归往子节点塞。void Max_Heapify(int a[],int i){//以给定指定数组下标为参数的方式最大堆化 int largest; int l = Left(i); int r = Right(i); if(l<heapsize &...原创 2019-01-21 13:26:34 · 2870 阅读 · 1 评论 -
优先队列(堆)
优先队列以堆的方式实现(承上一篇博客)优先队列要实现:INSERT(S,x):把元素x插入集合S。MAXIMUM(S):返回S中具有最大关键字的元素。EXTRACT-MAX(S):去掉并返回S中的具有最大关键字的元素。INCREASE-KEY(S,x,k):将元素x的关键字值增加到k,k值不小于x的关键字值。MAXIMUM(S):int Heap_Maximum(int a[]){...原创 2019-01-21 14:36:16 · 104 阅读 · 0 评论 -
快速排序
快速排序将一串数组分成四部分,有一个主元x,x的左边都比x小,x的右边都比x大。一开始选择数组的最后一个数作为主元x,然后以i记录比主元小的部分,以j记录比主元大的部分,还有一个主元部分,剩下是还未扫描到的部分。(黄色为大于主元的子数组)i,p,j &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;原创 2019-01-22 13:19:12 · 131 阅读 · 0 评论 -
计数排序
计数排序数组中有n个元素都是在0—k之间。对每一个输入元素,确定小于x的元素个数。即一共需要三个数组a[],b[],c[];a[]存放初始数组,b[]存放排序后的数组,c[]作为临界数组用来存放小于等于a[i]的个数。假设有10个元素小于x,则将x放在b[]中的第11位。#include <stdio.h>void Counting_Sort(int a[],int b[],...原创 2019-01-22 21:49:34 · 89 阅读 · 0 评论 -
链表相关操作
链表相关操作关于链表的头插法、尾插法、删除节点、插入节点。#include<stdio.h>#include<stdlib.h> typedef struct List{ int data; struct List *next;}list,*Linklist;Linklist Creat_onHead(Linklist head,int x){//头插法...原创 2019-01-28 20:59:43 · 114 阅读 · 0 评论