学习过冒泡、希尔等排序算法,但是在实际编程中还从未使用过,不知如何使用??举个例子:
一个数组:int ii[1000];(数组ii里的元素是乱的,每一个元素的值都可能是任何整数)
找出其中 元素值是"555"的元素的位置(假设值为"555"的元素有且只有一个)。我只会从头开始一个一个往下找,这样是不是会比较低效?用希尔、堆排序的思想是否会提高效率?
还是说,从概率的角度上看,由于"555"每次出现的位置可能会不同,多次查找所用的时间(对于使用 从头开始查找 从尾开始查找 从两边依次查找......等等 其他各种方式的查找 所用时间)的平均值 会趋于同一个值??
一个数组:int ii[1000];(数组ii里的元素是乱的,每一个元素的值都可能是任何整数)
找出其中 元素值是"555"的元素的位置(假设值为"555"的元素有且只有一个)。我只会从头开始一个一个往下找,这样是不是会比较低效?用希尔、堆排序的思想是否会提高效率?
还是说,从概率的角度上看,由于"555"每次出现的位置可能会不同,多次查找所用的时间(对于使用 从头开始查找 从尾开始查找 从两边依次查找......等等 其他各种方式的查找 所用时间)的平均值 会趋于同一个值??
感觉学习算法的过程只是一种思维训练过程,实际中不一定要用到,说来很惭愧,本人写了几年代码只用过2次冒泡排序算法,还是COPY过来的,哈哈你这个要具体分析,只找1次,当然不用排序,
在实际代码中生成这个数组ii的过程很重要啊,你可以加些东西,为下一步做打算
除非一开始你不放在数组中,而是放到map等中间,然后根据你 "555"作为key来查找
查找555就看下查找算法,有些还是要自己写.
现在假定 数组 里 每个元素都是随机的 但是又有且只有一个"555"。注意:是假定啊,大家在我这个 前提 下 来出主意啊;不要再来 推翻我的 大前提 了,说插入时先做相应工作。
现在拿到手的是上面所说得 乱的 数组ii ,要找到唯一的"555",怎么样最快?连续找10000次"555"(当然每次ii也不同),何种方式最快?先排序,后查找吗?给个 思路 或 相关技术(最好做点介绍,见识较少,怕不知所云),谢谢。
for(i=0;……)
{
if(ii[i] == "555")
break;
}
这是最快最高效的方法。
所有的排序法都是反复的判断调换位置。都比这个慢的多了。如果是大量次数的查找。建议先排序。