zoukankan      html  css  js  c++  java
  • C语言——for循环和while循环的效率区别——类似哨兵思想

    int ID_Conv_Sentinel(int u16device_cfg_num)
    {
        int i8id;
    	
    	int size=0;
        int i=0;
    	
    	size = sizeof(Device_ID_Table)/sizeof(Device_ID_Table[0]);
    	
    	while(Device_ID_Table[i]!=u16device_cfg_num)
    	{
    		//遍历0到size-1的数值
    		i++;
    		if(i==size)
    		{
    			i = -1;
    			break;	//必须break,否则数组溢出
    		}
    		//如果i未达到size-1,会自动退出while循环
    	}
    	
    	i8id = i;
    	
    	return i8id;
    }
    
    
    int ID_Conv(int u16device_cfg_num)
    {
    	int i8id;
    	
    	int size=0,i = 0;
    
    	size = sizeof(Device_ID_Table)/sizeof(Device_ID_Table[0]);
    	
    	for(i=0; i<size; i++)
        {
    		//如果好列表中的有符合,则把i保存
    		if(u16device_cfg_num == Device_ID_Table[i])
    		{
    			i8id = i;
    			break;	//跳出循环,不再查找
    		}
        }
    	if(i == size)
    	{
    		//如果已经遍历完毕,仍未找到,则返回-1
    		i8id = -1;
    	}
    	
    	return i8id;
    }

    在for循环中每次循环都需要对i进行是否越界的判断,而while循环查找只要对比一次即可,避免了查找过程中每次比较后都要判断查找位置是否越界的小技巧,看似与原先差别不大,但是总数据较多时,效率提高很明显,是非常好的编程技巧。当然,“哨兵”也不一定在数组开始,也可以在数组的末端甚至是任何位置。
     

  • 相关阅读:
    Linux网络设置
    Linux文件权限
    对象缓冲池
    环形缓冲区ringbuffer
    linux字符集设置
    共享内存(ShareMemory)
    堆算法(make_heap,push_heap,pop_heap, sort_heap)
    (广州)软件开发定制服务,工作流引擎 OA 库存管理系统
    工作流规范WfMC是什么?
    开启MSDTC的方法
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007389.html
Copyright © 2011-2022 走看看