
算法
codingnote
记录编程生涯中的点点滴滴
展开
-
排序 - 插入排序
插入排序针对数量较小的序列特别有效,其算法思想为向有序子序列中插入元素a[i]使新的序列仍有序。算法实现见InsertSort.cppvoid insertSort(int a[], int size) { int i, j, tmp; for (i = 1; i < size; i++) { tmp = a[i]; for (j = i;原创 2015-03-15 23:56:34 · 741 阅读 · 0 评论 -
排序 - 快速排序
快速排序是在实践中最快的已知排序算法,它的平均运行时间是O(NlogN)。该算法之所以特别快,是由于非常精炼和高度优化的内部循环。它的最坏情形性能为O(N2)。快速排序是一种分治的递归算法。将数组S排序的基本算法由下列简单的四步组成: 1.如果S中元素个数为0或1,则返回 2.取S中任一元素v,称之为枢纽元(pivot) 3.将S - {v} (S中其余元素)分成2个不相交集合:S1 = {x原创 2015-04-02 09:48:10 · 461 阅读 · 0 评论 -
排序 - 希尔排序
希尔排序(Shellsort)的名字源于其发明者Donald Shell, 被认为是冲破2次时间界限的第一批算法,但最坏情况时间复杂度为O(n2)。它通过比较相距一定间隔的元素来进行工作;各躺比较的距离逐渐减小,直到相邻元素比较(此时变成了插入排序)。希尔排序使用增量序列h1、h2、h3…h(t)。只要h1 = 1任何增量序列是可行的,不过有些增量序列比另外一些更好。在使用增量hk的一趟排序后,对于原创 2015-04-02 11:09:08 · 796 阅读 · 0 评论 -
查找 - 二分查找
二分查找是利用分治思想减小问题规模的一种查找算法,二分查找的序列必须是有序的。 算法如下:bool bsearch(std::vector<int>ivec, int target) { auto begin = ivec.begin(), end = ivec.end(), mid = begin + (end - begin) / 2; while (begi原创 2015-04-02 15:53:31 · 804 阅读 · 0 评论 -
链表 - 单链表逆序
单链表逆序是经典的链表操作算法,单链表逆序的算法思想是将链表箭头反指(假设next指针是一个箭头),即所谓的改链,改链过程如下。逆序前:head-->......prev-->cur-->next-->......->NULL逆序后:NULL<--......prev<--cur<--next<--......head算法逻辑: 1.空链表或只有一个元素,返回原链表head。 2.定义3个原创 2015-04-14 15:01:02 · 1061 阅读 · 0 评论 -
排序-冒泡排序
冒泡,顾名思义大泡上浮或小泡下沉,冒泡排序是一种反复交换相邻元素值的排序算法,每一轮交换出最大或最小值到正确的位置,n - 1轮交换结束后序列排序完成。算法实现见BubleSort.cpp: void swap(int &a, int &b) { int tmp = a; a = b; b = tmp; } void bubleSort(int array[],原创 2015-03-15 23:35:15 · 661 阅读 · 1 评论