![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法基础
浪飞
张飞雪 宅男一枚 喜欢自由 不喜欢被约束 不拘一格 小时候 幸福很简单 现在 简单很幸福
展开
-
排序算法之堆排序
基本思想: 在堆排序的算法中先建一个大顶堆,既先选得一个关键字作为最大的记录并与序列中最后一个记录交换,然后对序列中前N-1记录进行选择,重新将它调整成一个大顶堆,如此反复直到排序结束。 #include <stdio.h> const int Length = 10; //堆大小 void Max_Heapify(int [], int, int); void Build...原创 2011-10-05 19:18:21 · 440 阅读 · 0 评论 -
排序算法之基数排序,随机数的产生和程序运行时间的计算
一,基数排序 基本思想: 按最低位优先法先对低位关键字进行排序,直到对最高位关键字排序为止,经过若干次分配和收集来实现排序 基数排序中用到了箱排序,每个箱子都是先进先出,因此采用队列是最合理的数据结构。如下图: 开始采用顺序表的存储结构,每次分派10个Length长的队列,写了很多代码,运行却发现速度很慢,不符合基数排序的理论时间复杂度O(k*n),而且消耗内存也很多(1...原创 2011-10-05 19:28:31 · 2216 阅读 · 0 评论 -
双向循环链表
某线性表数据元素类型为整型,以双向循环链表结构存储线性表。试编程实现: ⑴ 输入数据元素,以先进先出形式创建双向循环链表 ⑵ 销毁双向循环链表 ⑶ 线性表置空 ⑷ 求线性表长度 ⑸ 在第i个数据元素前插入新的元素 ⑹ 删除元素(按指定元素序号和元素值2种方式) ⑺ 显示线性表中的全部元素 ⑻ 求最大元素的值和平均值 ⑼ 就地逆置双向循环链表(不允许将结点中的值互相交换) ...原创 2011-06-08 14:00:00 · 1416 阅读 · 0 评论 -
求子数组的最大和(O(n)和分治法O(nlogn))
一,O(n)算法,解释见代码 二,分治算法 跟二分查找的思想相似,我们可以分情况讨论这个问题是不是符合二分查找的条件。 情况1.这个满足最大和的子数组全部在本数组的左半部或者右半部。例如:左半部A[i]……A[n/2-1]或者右半部A[n/2]……A[j]。这种情况下可以直接使用递归调用。 情况2.满足最大和的子数组跨过了本数组的中间点。例如:A[i]……A[n/2-1] A[n/2...原创 2011-09-27 17:17:21 · 1437 阅读 · 0 评论 -
排序算法之快速排序
快速排序基本思想:挖坑填数+分治法 快速排序的分治partition过程有两种方法,一种是上面所述的两个指针索引一前一后逐步向后扫描的方法(算法导论上采用的是这种方法),还有一种方法是两个指针从首位向中间扫描的方法(大多数的人和一般的教材采用的是这第二种首尾向中间扫描法)。本文采用第二种方法。 1,把第一个作为基准, 2,先从后向前找,找到小于的,放在第一个 3,再从前向后找,找到大于的,...原创 2011-10-05 18:59:20 · 683 阅读 · 0 评论 -
顺序表
线性表数据元素的类型为整型,以顺序表为存储结构。试编程实现: ⑴ 线性表置空 ⑵ 求线性表长度 ⑶ 数据元素的插入操作 ⑷ 数据元素的删除操作 ⑸ 显示线性表中的全部元素 #include<stdio.h> #define LIST_INIT_SIZE 100/* */ #define LISTINCREMENT 10/* */ typedef struct{/* *...原创 2011-05-23 00:10:00 · 555 阅读 · 0 评论