算法和实现
文章平均质量分 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 · 468 阅读 · 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 · 706 阅读 · 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 · 1038 阅读 · 0 评论 -
选择排序 实现
插入排序基本原理: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕 时间复杂度:n^2 稳定排序 算法实现 void SelectionSort(int arr[], int len) { for(int i=0; i<len-1; i++)原创 2013-05-16 12:07:45 · 521 阅读 · 0 评论 -
求2进制中1的个数
解法1 int Count(unsigned int v) { int num=0; while(v) { num += v & 0x01; v>>=1; } return num; } 算法复杂度lo原创 2011-09-19 16:01:06 · 505 阅读 · 0 评论 -
atoi和itoa的实现
atoi int atoi(char* in) { int sign=1; if(*in == '-') sign=-1; int sum=0; in++; while(*in!='\0')原创 2011-09-19 16:25:06 · 433 阅读 · 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 · 462 阅读 · 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 · 429 阅读 · 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 · 823 阅读 · 0 评论 -
二叉树 中序遍历 算法
递归 和 非递归原创 2010-08-30 16:06:00 · 584 阅读 · 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 · 432 阅读 · 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 · 423 阅读 · 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 · 774 阅读 · 0 评论 -
冒泡排序 算法
基本思想:每次上浮最小的(或者下浮最大的) 知道某次冒泡没有任何改动 停止排序 复杂度: n^2 稳定排序 算法要点: 1. 设置哨兵 2. 每次外层循环次数减一 算法实现 void BubbleSort(int arr[], int len) { bool bChanged = true; while(len && bChanged)原创 2010-06-12 17:54:00 · 438 阅读 · 0 评论