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

  • 相关阅读:
    全球市场
    去做《波士堂》的现场观众?
    JavaScript测试工具
    Opera 10 正式版发布
    [ZZ]亚马逊购物的用户体验分析
    中国电子商务十二年调查报告
    推荐——李黎的《轻公司》
    [ZZ]国外互联网发展趋势
    [ZZ]走出Google(下)
    空中英语教室
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007389.html
Copyright © 2011-2022 走看看