![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
SnowYong
Valar Morghulis
展开
-
给定一个无序单链表头节点head,实现单链表的选择排序,要求:额外空间复杂度为O(1)
如题,在QQ群上有人提出这个如何解决,对空间复杂度概念不是特别熟悉,网搜了下,简单理解为尽可能不适用递归吧,虽然欠妥,但暂时先这样吧, 给定的是头节点head,当时因为没看清楚,直接用了头指针,问题不大,自己练练手,故撸代码如下,程序较为简陋,没有检查错误等代码,望轻喷- - /* * * SelectSort the LinkList according to the原创 2015-11-08 23:21:33 · 1426 阅读 · 0 评论 -
平衡二叉树(AVL树) ----- C语言
前面说到了二叉搜索树,它在动态查找表中有较高的性能,既能保证在无序数据中查找的高效率,又相对于数组具有方便的增添删除功能, 其平均查找复杂度为所构造的二叉树的树高,即O(logn)( 图1 ),但是,对于极端情况,例如该二叉树是一颗左斜树或者右斜树 (图2) 。 此时,显然可以看到,最坏查找时间复杂度为O(n),这就意味着我们的二叉搜索树变成了顺序查找,效率极为低下,所以我们需要一种 平衡二原创 2015-12-18 22:38:47 · 3096 阅读 · 4 评论 -
快速排序(已优化) ----- C语言
拿快速排序练练手,基本思想就是选取一较为中间大小的值,分别从两边循环跟此值对比,若小于其,则换至该值前面,若大于其,则换至该值后面, 直到low = high 为止,则说明排序结束。 以简单的int数组为待排序序列: #define MINIMUMSIZE 7 #define A_LENGTH 10 #include //元素交换函数 int Swap(int *a, int i,原创 2015-11-21 19:13:21 · 1252 阅读 · 0 评论 -
二叉搜索树(BST) ----- C语言
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 二叉排序树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉排序树的存储结构。中序遍历二叉排序原创 2015-12-11 16:41:45 · 662 阅读 · 0 评论 -
征服C指针读书笔记 1 ----- 指针基本概念
1、先有“指针类型”,才有了“指针类型的变量”和“指针类型的值”。 2、变量不一定按照声明顺序保存在内存中。 3、对变量使用&运算符,可以取得该变量的地址,此地址称为指向该变量的指针。 4、指针变量hoge_p保存了指向其它变量的地址的情况下,可以说“hoge_p指向hoge”。 5、对指针变量运用*运算符,就等同于它指向的变量。如果hoge_p指向hoge,*hoge_p就等同于hoge原创 2015-10-17 22:57:31 · 442 阅读 · 0 评论 -
堆排序 ----- C语言
堆排序主要思想实现代码 ------------------- //HeapSort -- 堆排序 O(nlogn) int HeapSort(int *a) { int i; //初始化从中间位置开始构造大顶堆 for (i = A_LENGTH/2 - 1; i >= 0; i--) { HeapAdjust(a, i, A_LENGTH-1); } //原创 2015-11-29 17:00:49 · 465 阅读 · 0 评论 -
归并排序(非递归) ----- C语言
最近搞了很久才基本弄清楚非递归的归并排序的基本思想,查阅许久才看懂代码,自己简单地实现了一下: #define A_LENGTH 10 #include #include int MergeSort(int *a) { int k = 1;/*k用来表示每次k个元素归并*/ int *temp = (int *)malloc(sizeof(int) * A_LENGTH);原创 2015-11-20 22:38:20 · 2090 阅读 · 5 评论 -
串的KMP模式匹配算法(优化) ----- C语言
#include #include int GetNext(char *T, int *next) { int i = 0, j = -1; next[i] = j; while (i < strlen(T)) { if (j == -1 || T[i] == T[j]) { i++; j++; if (T[i] != T[j]) {原创 2015-11-10 22:34:49 · 490 阅读 · 0 评论 -
常用排序算法总结(简单数组实现,其他类似)----- C语言
闲来无事,写了写之前学的排序算法,能力有限,也就写成这样吧= = /* * * 各类排序算法复习(简单数组实现,其他类似) * Sort Type Review * 2015.11.09 * By Snow Yong * */ #define MINIMUMSIZE 7 #define A_LENGTH 10 #include int Swap(int *a, int i, in原创 2015-11-09 17:51:20 · 717 阅读 · 0 评论