有序数组 每次排除一半的错误选项 如果包含重复数据则随缘返回正解之一(重复数据的时候找到的位置就不是唯一的)举例 2的6次方 等于64个成员 其中第一次找到1次 第二次找到2次第三次找到4次 第四次找到8次 第五次找到16次 第六次找到32次 平均每个数第几次被找到的次数在大约5.1次左右 每个数最多多少次被找到 最简单的算法就是数组成员数循环除以2 一直除到小于等于1 除2的次数就是对应的数组成员最多循环多少次一定会被找出 不会大于这个次数 而普通的遍历方式的时间复杂度则是((1+成员数)*(成员数/2))/成员数 ((1+64)*(64/2))/64=平均每个数需要循环32.5次才能被定位准确位置 考虑到折半查找里面的计算量 再把重复次数乘以6倍 也才两者相等 也就是说 数组的成员数在50个以上 用折半查找的速度就可以明显的感受到差距 本来是拿来搞自定义数据类型排序的 结果逻辑梳理完毕没有任何毛病 你们敢想 数据二[计次]=数据一[计次] 竟然经常不能成功的把自定义的数据各个成员的值赋值过去 这是什么鬼BUG 我打开的方式不对吗 数组成员几十上百万每个数都全部查一遍也是秒出 数据越多 和普通的循环遍历速度差距越明显 应付百万级别的数组成员这个写法勉强够用 再多的就要重新捣鼓汇编了 坑先挖在这里 有机会再来填坑 如果可以解决自定义数据类型的赋值或者交换工作 就捣鼓汇编的写法 搞不定自定义的数据类型赋值 弄出来也没啥用 本身就是为了搞自定义数据类型排序而写的
来自群组: 热心网友 |