标签:
时间空间复杂度分析:
牺牲时间换取空间,或者牺牲空间换取时间:
如果空间很大,可以用多线程来,可以大大提速
如果空间很小,只用一个元素,这样增加了时间
用 异或^ 不用借助中间变量就能实现数据的交换  a^=b  
要完成两个数组之间的交换,用一个数组来作为临时中间变量进行交换时,可以用多线程,
相比只用一个数据来作为临时变量,大大加快了速度,多线程可以并行处理,
O(n)相比O(1)可以加快速度,O(1)相比O(n)可以节约空间,
用 异或  ^   a^=b  就是O(0)既节约时间又节约空间
异或交换:(*p1) ^= (*p2);
	  (*p2) ^= (*p1);
	  (*p1) ^= (*p2); 
#include<iostream>
#include <time.h>
using namespace std;
//一般情况下看一个算法的时间就看循环,看空间就看节约了多少内存
void search(int *p,int n,int data)
{
	for (int i = 0; i < n;i++)//循环次数统计时间
	{
		if (p[i]==data)
		{
			return;
		}
	}
}
void  swap(int *p1,int *p2)
{
	(*p1) ^= (*p2);
	(*p2) ^= (*p1);   /*用 异或 ^ a^=b 就是O(0)既节约时间又节约空间*/
	(*p1) ^= (*p2);
	{
		int temp = *p1;
		*p1 = *p2; //用中间变量速度会很慢  用时间换空间
		*p2 = temp;
	}
}
void main()
{
	time_t ts;
	unsigned int times = time(&ts);
	srand(times);
	int a[100];
	for (int i = 0; i < 100;i++)
	{
		cout << (a[i] = rand()) << endl;
	}
	unsigned short  data = 65535;
	//data += 1;容错性,任何情况都可以处理
	printf("飞哥有%d个", data);
	cin.get();
}


                     索引的方式:
            相比数组:                                                             相比链式存储:
           N个索引,M个元素                                                       N个索引,M个元素      
     删除                 顺序查找        二分查找                           链表的查找 :O(M)   索引O(M/N)    
数组    索引           数组     索引     数组   索引                        链表的插入:O(1)     索引O(1) 
O(M)    O(M/N)         O(M)     O(M/N)   增加O(N) O(M/N)                   链表的删除:0(1)      索引O(1)
                                                                           链表的增加:O(1)      索引O(1)
最后给大家分享两道有点小变态的面试题:
1. int(*z(int x,int(*y)(int)))(int)
分析:
 原型是:int(*T)(int)
int(*y)(int)=Y 函数指针
1可以简写为:Y z(int x,Y)
z是一个函数 它的参数是一个函数指针 返回值又是一个函数指针
2.   int(*&z(int x,int(*&y)(int)))(int)
&z 函数指针的引用 它的参数是一个函数指针的引用  返回值是函数指针的引用
标签:
原文地址:http://www.cnblogs.com/FG123/p/5046718.html