A
aacc_1980
Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友,假如有一组数字,1、11、15、17、21、23、29,然后用户随意给出一个整数,如:19,如果采用循环的方式来进行排序,虽然可以排列出以下结果:1、11、15、17、19、21、23、29,但如果该组数字多的话,速度可能会比较慢。但小弟想采用折半的思路来进行排序,即先将19与该组数字的中间数进行比较,如果19大于该组数字的中间数,那么就直接与剩下的数字的中间数进行比较,依次类推,但虽然有这样的思路,但具体的实现方法却不知道如何做,能否帮忙写一个简单的例子,谢谢!<br>这是自己用循环作的,测试通过,可以成功排序,但希望有高手能帮忙改进一下,用折半的方法来解决该问题,谢谢!!!<br><br>var<br> arr_str: array of integer;<br> arr_new: array of integer;<br> i, j, k, tmp: integer;<br>begin<br> tmp := StrToInt(Trim(edit1.Text));<br> SetLength(arr_str, 4);<br> SetLength(arr_new, 5);<br> j := 0;<br> arr_str[0] := 1;<br> arr_str[1] := 5;<br> arr_str[2] := 8;<br> arr_str[3] := 11;<br> for i := low(arr_str) to high(arr_str) do<br> begin<br> if tmp > arr_str then<br> begin<br> arr_new := arr_str<br> end<br> else<br> begin<br> arr_new := tmp;<br> j := 1;<br> Break;<br> end;<br> end;<br> k := i + 1;<br> if j = 1 then<br> begin<br> for j := k to high(arr_str) + 1 do<br> begin<br> arr_new[j] := arr_str;<br> i := i + 1;<br> end;<br> end<br> else<br> begin<br> arr_new[high(arr_str) + 1] := tmp;<br> end;<br> for i := low(arr_new) to high(arr_new) do<br> ShowMessage(IntToStr(arr_new));<br>end;