首页 > 其他 > 详细

lua堆排

时间:2016-01-16 18:58:16      阅读:284      评论:0      收藏:0      [点我收藏+]
 1 math.randomseed( 1 );          --固定序列 便于调试 可改为os.time()
 2 
 3 function GenRnd( n )           --生成随机数
 4     data = {};
 5     r = math.random;
 6     for i = 1, n do
 7         data[i] = r( n );
 8     end
 9     return data;
10 end
11 
12 --调用
13 data = GenRnd( 30 );
14 
15 --打印
16 for i, v in ipairs(data) do
17     io.write(""..v.. );
18 end
19 print("");
20 
21 
22 --[[
23     堆排示例
24 --]]
25 
26 --调整单个节点
27 function BuildHeap( data, dlen, idx )
28 
29     --若当前已经为叶子节点,停止循环
30     while (idx << 1) <= dlen do
31 
32         --找出左右孩子中哪个大
33         idx1 = idx << 1;
34         if idx1 + 1 <= dlen and data[idx1 + 1] > data[idx1] then
35             idx1 = idx1 + 1;
36         end
37 
38         --若最大的孩子比父节点小 堆调整完毕
39         if data[idx1] <= data[idx] then
40             break;
41         end
42 
43         --否则交换之
44         tmp = data[idx];
45         data[idx] = data[idx1];
46         data[idx1] = tmp;
47 
48         idx = idx1;
49 
50     end
51 end
52 
53 --建堆
54 function HeapSort( data )
55     --构建初始堆
56     for i = ( #data >> 1 ), 1, -1 do
57         BuildHeap( data, #data, i );
58     end
59 
60     --开始排序
61     for i = #data, 2, -1 do
62         
63         BuildHeap( data, i, 1 );
64 
65         tmp = data[1];
66         data[1] = data[i];
67         data[i] = tmp;
68 
69     end
70 end
71 
72 
73 
74 
75 --调用
76 HeapSort( data );
77 
78 --打印
79 for i, v in ipairs(data) do
80     io.write(""..v.. );
81 end
82 print("");

 

lua堆排

原文:http://www.cnblogs.com/javado/p/5135714.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!