计数排序是稳定排序,而且是线性时间内的排序算法,时间复杂度是O(n + k)其中k是待排序数组的范围。计数排序不是原址排序,空间复杂度是O(n + k)
//k是指A中的数组范围是0~k 包括0和k
void count_sort(int A[], int B[], int n, int k)
{
    int *C = (int *)malloc(sizeof(int) * ...
                            
                            
                                分类:
编程语言   时间:
2015-08-04 00:39:31   
                                阅读次数:
131
                             
                    
                        
                            
                            
                                为什么要进行算法分析?
预测算法所需的资源
计算时间(CPU 消耗)内存空间(RAM 消耗)通信时间(带宽消耗)
预测算法的运行时间
在给定输入规模时,所执行的基本操作数量,或者称为算法复杂度(Algorithm Complexity)
如何衡量算法复杂度?
内存(Memory)时间(Time)指令的数量(Number of Steps)特定...
                            
                            
                                分类:
编程语言   时间:
2015-08-02 21:44:16   
                                阅读次数:
213
                             
                    
                        
                            
                            
                                示例代码(1)
decimal Factorial(int n)
    {
      if (n == 0)
        return 1;
      else
        return n * Factorial(n - 1);
    }
【分析】
阶乘(factorial),给定规模 n,算法基本步骤执行的数量为 n,所以算法复杂度为 O(n)。
示例代码(2)
int FindMaxElement(int[] array)
    {
      int max = array[0]...
                            
                            
                                分类:
编程语言   时间:
2015-08-02 21:43:05   
                                阅读次数:
174
                             
                    
                        
                            
                            
                                这题看似简单,不过两个要求很有意思:1、不准用除法:最开始我想到的做法是全部乘起来,一项项除,可是中间要是有个0,这做法死得很惨。2、空间复杂度O(1):题目说明了返回的那个数组不算进复杂度分析里面做法:既然不用除法,对于某个数i, result[i] = 0到i - 1的乘积 X i + 1...
                            
                            
                                分类:
其他好文   时间:
2015-08-02 19:46:56   
                                阅读次数:
124
                             
                    
                        
                            
                            
                                一、因为要判断左右链表的断电的对称,可以先将节点取出,放到vector当中,然后使用随机访问的方式对其进行对称性判断空间复杂度为 O(n),时间复杂度为O(n)二、可否将空间复杂度降下来,可以采用两个指针,将链表分为两部分。dummy->head从dummy开始一个指针每次前进一步,另一个指针每次前...
                            
                            
                                分类:
其他好文   时间:
2015-08-02 13:06:59   
                                阅读次数:
158
                             
                    
                        
                            
                            
                                /*
两个字符串A、B。从A中剔除存在于B中的字符。
比如A = “hello world”, B = "er",那么剔
除之后A变为"hllo wold"。空间复杂度要求是O(1)
,时间复杂度越优越好。
*/
#include 
#include 
using namespace std;
void Grial(char *str,char *ptr)
{...
                            
                            
                                分类:
编程语言   时间:
2015-08-02 06:24:28   
                                阅读次数:
127
                             
                    
                        
                            
                            
                                计数排序
计数排序假设n个输入元素中的每一个都是介于0到k之间的整数。此处k为某个整数(输入数据在一个小范围内)。
算法思想
计数排序的基本思想是对每一个输入元素x,确定出小于x的元素的个数。然后再将x直接放置在它在最终输出数组中的位置上。
 
由于数组中可能有相等的数,在处理时需要注意。
 
时间复杂度和空间复杂度分析
算法总时间Θ(k + n)。当k=O(n)时,计数排序的...
                            
                            
                                分类:
编程语言   时间:
2015-08-01 23:35:40   
                                阅读次数:
151
                             
                    
                        
                            
                            
                                归并排序典型的分治策略的体现,时间复杂度是O(nlgn), 空间复杂度是O(n).属于稳定排序。
下面是C语言实现代码。
#define MAX 10000000
//p, q, r是均是元素的下标
void merge(int A[], int p, int q, int r)
{
    int n1 = q - p + 1;
    int n2 = r - q;
    int...
                            
                            
                                分类:
编程语言   时间:
2015-08-01 20:37:03   
                                阅读次数:
145
                             
                    
                        
                            
                            
                                例:长度为N的数组,把奇数放到数组的前面,偶数放到数组的后面 空间复杂度为O(1)核心思想是:定义两个指针,一个指针A从前往后扫描,一个指针B从后往前扫描。指针A扫描到偶数暂停,指针B扫描到奇数暂停,然后交换着两个数,交换之后继续如上述扫描和交换,直到指针A和指针B重合停止。C语言中&表示按位与,0...
                            
                            
                                分类:
编程语言   时间:
2015-08-01 07:39:16   
                                阅读次数:
108
                             
                    
                        
                            
                            
                                手摇算法(也叫三次反转算法)
看题:将字符串abcdefg,变成efgabcd,要求空间复杂度O(1)。
解答:
第一步:将子串abcd反转,变成dcba。源字符串变成dcbaefg第二步:将字串efg反转,变成gfe。源字符串变成dcbagfe第三步:将整个字符串dcbagfe反转,变成efgabcd。
手摇算法常常被用来旋转字符串。同时,手摇算法也可以用来做原地归并...
                            
                            
                                分类:
编程语言   时间:
2015-07-31 10:37:41   
                                阅读次数:
189