学习过冒泡、希尔等排序算法,但是在实际编程中还从未使用过,不知如何使用??举个例子:
一个数组:int ii[1000];(数组ii里的元素是乱的,每一个元素的值都可能是任何整数)
找出其中 元素值是"555"的元素的位置(假设值为"555"的元素有且只有一个)。我只会从头开始一个一个往下找,这样是不是会比较低效?用希尔、堆排序的思想是否会提高效率?
还是说,从概率的角度上看,由于"555"每次出现的位置可能会不同,多次查找所用的时间(对于使用  从头开始查找  从尾开始查找  从两边依次查找......等等 其他各种方式的查找 所用时间)的平均值 会趋于同一个值??

解决方案 »

  1.   

    个人体会:
    感觉学习算法的过程只是一种思维训练过程,实际中不一定要用到,说来很惭愧,本人写了几年代码只用过2次冒泡排序算法,还是COPY过来的,哈哈你这个要具体分析,只找1次,当然不用排序,
    在实际代码中生成这个数组ii的过程很重要啊,你可以加些东西,为下一步做打算
      

  2.   

    如果已经放到数组了,那么根据可能出现的位置概率,遍历一次查找好了...
    除非一开始你不放在数组中,而是放到map等中间,然后根据你 "555"作为key来查找
      

  3.   

    个人感觉在数据量小时用哪个无所谓,但大数据量大时用堆排序会好很多,因为它的时间复杂度最差才是n*logn,快速差一些,它的时间复杂度为n*logn冒泡就不用考虑了,N2的时间复杂度太慢了,至于查找如果只找一次了话就一个一个查吧,如果找多次就先排序然后用折半
      

  4.   

    排序方法都是学数据结构要掌握而已,我自己要排序的话都是STL的qsort,从来没自己写过.
    查找555就看下查找算法,有些还是要自己写.
      

  5.   

    我开始想到利用hash桶的方式,但lz的问题好像跟排序方法是没有关系的。如果555的插入是预先能够知晓的,为什么非要通过排序来实现查找呢。
      

  6.   


    现在假定 数组 里 每个元素都是随机的 但是又有且只有一个"555"。注意:是假定啊,大家在我这个 前提 下 来出主意啊;不要再来 推翻我的 大前提 了,说插入时先做相应工作。
    现在拿到手的是上面所说得 乱的 数组ii ,要找到唯一的"555",怎么样最快?连续找10000次"555"(当然每次ii也不同),何种方式最快?先排序,后查找吗?给个 思路 或 相关技术(最好做点介绍,见识较少,怕不知所云),谢谢。
      

  7.   

    给个个人观点,如果在一堆乱数中只查找这么一次,就用直接找。
    for(i=0;……)
    {
    if(ii[i] == "555")
     break;
    }
    这是最快最高效的方法。
    所有的排序法都是反复的判断调换位置。都比这个慢的多了。如果是大量次数的查找。建议先排序。