
数据结构和算法
ArvinYL
要么热爱,要么离开
展开
-
冒泡算法的优化
最近看到很多朋友面试或者校招基本二面都快结束了,结果面试官问他会不会写冒泡算法。对大部分人来说,冒泡算法还不是手到擒来,毕竟学习c语言基本第一个数组排序就是冒泡和选择排序.基本大家的写法都是这样:void bullbleSort(int a[],int n){ for(int i=n-1;i>0;--i) { for(int j=0;j<i;j++) ...原创 2018-11-24 22:20:57 · 193 阅读 · 0 评论 -
排序算法之基数排序
来源百度百科 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定...原创 2019-05-18 17:53:40 · 170 阅读 · 0 评论 -
排序算法之计数排序
来源百度百科 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 [1-2] 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是...原创 2019-05-13 21:41:05 · 320 阅读 · 0 评论 -
排序算法之桶排序
所谓的外部排序就是数据存储在外部磁盘中,数据量比较大,内存有限,无法将所有数据都加载进内存原创 2019-05-05 21:42:31 · 302 阅读 · 0 评论 -
排序算法之选择排序
选择排序的实现来源百度百科:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。一.基本思想 选择排序...原创 2019-04-29 16:14:32 · 409 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序的实现来源百度百科:冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从> 大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶...原创 2019-04-29 10:19:32 · 230 阅读 · 0 评论 -
排序算法之归并排序
来源百度百科:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。一、基本思想 将数组分为两个数组,两个数组再使用递归再拆分为若干个小数组,小数组排序完成后,...原创 2019-05-03 15:46:36 · 167 阅读 · 0 评论 -
排序算法之快速排序
来源百度百科:快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。一、基本思想 从数组中下标0~arr.leng...原创 2019-05-03 15:19:23 · 144 阅读 · 0 评论 -
排序算法之插入排序
来源百度百科:插入排序(Insertion sort)是一种简单直观且稳定的排序算法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。一、基本思想 将数组分为两部分,一部分是已排序的数组,一部分是未排...原创 2019-05-03 10:53:09 · 294 阅读 · 0 评论 -
链表的基本操作
链表常见的基本操作包括:链表的创建操作链表的遍历操作链表的插入操作链表的查询操作链表的删除操作* 删除链表中的某个元素删除整个单链表完整代码一、链表的创建操作//创建链表PNode createList(){ int len ;//定义链表长度 int val ;//用来存放节点的数值 PNode pHead = (PNode)mallo...原创 2019-03-25 10:25:16 · 320 阅读 · 0 评论 -
链表的应用
在面试中,关于链表的考察,大多都是结合题目来对链表进行综合考察。链表的一些应用一般为以下几种。单链表反转链表中环的检测两个有序的链表合并删除链表倒数第n个节点求删除的中间节点两两交换链表中的节点单链表反转 //解法一 struct ListNode* reverseList(struct ListNode* head) { //定义三个指针 ...原创 2019-03-25 21:00:16 · 538 阅读 · 0 评论