
算法和实现
文章平均质量分 55
rommi
这个作者很懒,什么都没留下…
展开
-
希尔排序 实现
<br />希尔排序思想: 分组 通过步长来分组 步长每次减小 最后1轮为1, 每组数字进行插入排序<br />稳定性:非稳定排序<br />复杂度:nlogn<br /> <br />算法实现:<br />#include "stdafx.h"// 对每组进行插入排序void GroupSort(int nData[], int nBegin, int nEnd, int nStep){ for(int i=nBegin; i<=nEnd-1; i=i+nStep) { fo原创 2010-06-25 14:24:00 · 499 阅读 · 0 评论 -
二分查找注意点
二分查找的前提: 已序序列正确算法:int binary_sort(int arr[], int length, int value){ if(arr == NULL || length == 0) return -1; int ret = -1; int left = 0; int right = length-1;原创 2013-05-28 17:02:44 · 721 阅读 · 0 评论 -
算法时间复杂度计算
定义: 算法中基本操作重复执行的次数是问题规模n的某个函数计算循环次数k和循环变量之间的关系具体步骤可以简化为:1. 找到执行次数最多的语句2. 计算语句执行次数的数量级3. 用大O来表示结果例1: int Sum1( int n ){ int p=1, sum=0, m ; for (m=1; m<=n; m++) {原创 2013-05-10 15:52:15 · 1074 阅读 · 0 评论 -
选择排序 实现
插入排序基本原理: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕时间复杂度:n^2稳定排序算法实现void SelectionSort(int arr[], int len){ for(int i=0; i<len-1; i++)原创 2013-05-16 12:07:45 · 541 阅读 · 0 评论 -
求2进制中1的个数
解法1int Count(unsigned int v){ int num=0; while(v) { num += v & 0x01; v>>=1; } return num;}算法复杂度lo原创 2011-09-19 16:01:06 · 521 阅读 · 0 评论 -
atoi和itoa的实现
atoiint atoi(char* in){ int sign=1; if(*in == '-') sign=-1; int sum=0; in++; while(*in!='\0')原创 2011-09-19 16:25:06 · 453 阅读 · 0 评论 -
倒置单链表
<br />递归<br /> Node* reverse(Node* pHead){ if (pHead->pNext == NULL) { return pHead; } Node* pTmp = pHead->pNext; Node* pNewHead = reverse(pHead->pNext); pTmp->pNext = pHead; pHead->pNext = NULL;原创 2010-11-07 20:46:00 · 488 阅读 · 0 评论 -
算一个子串的和最大
<br />int max(int* p, int n){ int nMax = p[0]; int temp = p[0]; for(int i=1; i<n; i++) { for(int j=i; j<n; j++) { temp += p[j]; if(nMax < temp) nMax = temp; }原创 2010-11-05 17:03:00 · 443 阅读 · 0 评论 -
给定一个节点指针 删除单链中当前结点
<br />思想:把元素往前移,删除最后一个结点<br /> <br />struct List{ int data; struct List* next;};bool DeleteContent(List* p){ if(p->next == NULL) return false; while(p->next->next != NULL) { p->data = p->next->data;原创 2010-11-05 15:27:00 · 846 阅读 · 0 评论 -
二叉树 中序遍历 算法
递归 和 非递归原创 2010-08-30 16:06:00 · 609 阅读 · 0 评论 -
插入排序 实现
插入排序基本原理: 把要排序的数字 插入到 已经排序好的队列中时间复杂度:n^2稳定排序算法实现:#include "stdafx.h"void InsertionSort(int nData[], int nLen){ int i, j; for(i=0; i0 && temp原创 2010-06-13 14:22:00 · 444 阅读 · 0 评论 -
合并排序 算法实现
<br />合并排序主要思想:把两个已经排序好的序列进行合并,成为一个排序好的序列。<br />复杂度:nlgn<br />稳定排序 <br /> <br /> <br />实现<br />#include "stdafx.h"#define INT_MAX 9999999// 合并[pn, pm)[pm,pn)// 其中[pn, pm)[pm,pn) 分别为已经排序的队列void MergingSort(int nData[], int nP, int nM, int nR){ i原创 2010-06-13 13:52:00 · 459 阅读 · 0 评论 -
KMP算法和实现
题目:写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数先来一个非KMP算法int findSubString(char* pBase, char* pSource){ if(pBase == NULL || pSource == NULL) return 0; char* pSourceHead = pSource; char* pBaseHead原创 2010-04-29 14:56:00 · 788 阅读 · 0 评论 -
冒泡排序 算法
基本思想:每次上浮最小的(或者下浮最大的) 知道某次冒泡没有任何改动 停止排序复杂度: n^2稳定排序算法要点:1. 设置哨兵2. 每次外层循环次数减一算法实现void BubbleSort(int arr[], int len){ bool bChanged = true; while(len && bChanged)原创 2010-06-12 17:54:00 · 459 阅读 · 0 评论