论坛风格切换切换到宽版
  • 4767阅读
  • 1回复

【原创】二次排序的思路 [复制链接]

上一主题 下一主题
离线冯世磊
 

发帖
1212
金钱
20
威望
2
只看楼主 倒序阅读 0 发表于: 2006-02-07
User Posted Image

程序中需要完成先对“数量”进行排序,如果“数量”相同就将“资料”排序,因为牵扯到2个环节,所以称为二次排序。当然首先要完成最简单的数量排序,随便用数据结构的一种算法就可以,这里我选择了最简单的直接排序。直接排序有几大要明确的要素
1、排序的数量
2、排序的起始位置
3、排序的数组
当然第一次排序这些都是很容易得到的,第二次的排序因为第一次的结果未知,而每次排序都要在“数量”相同的部分中进行。所以就要对排序的数量,起始位置进行分析。通过搜寻相同“数量”然后累加的方法可以解决排序数量的问题,设置一个变量初始为0,每次排序后累加排序数量可以完成对起始位置的控制,tj_infor是个记录类型,只不过多交换了几次,没有别的变化,相关程序如下:
------------------------------------------------------------------------------------------------------------
//开始排序(使用选择排序法-)
for a:=0 to M_count-1 do
begin
min:=a;
for b:=a+1 to m_count do
//选择升序还是降序,sort为布尔类型
if sort then
begin
if tj_infor.count<tj_infor[min].count then
min:=b;
end //2006年1月8日加入begin end ,修正了语法编译上的错误,解决不能正常排序的问题
else
if tj_infor.count>tj_infor[min].count then
min:=b;
//数值互换
if min<>b then
begin
tj_temp.value:=tj_infor[a].value; //传递临时值
tj_temp.count:=tj_infor[a].count;
tj_infor[a].value:=tj_infor[min].value;
tj_infor[a].count:=tj_infor[min].count; //完成2数交换
tj_infor[min].value:=tj_temp.value;
tj_infor[min].count:=tj_temp.count;
end;
end;
//二次排序
if main.CheckBox1.Checked then
begin
s_start:=0;//设置开始位置
s_temp:=tj_infor[0].count;
s_count:=0;
for s_find:=0 to M_count do
begin
if tj_infor[s_find+1].count=s_temp then
s_count:=s_count+1
else
begin
if s_count>1 then
for a:=s_start to (s_start+s_count-1) do
begin
min:=a;
for b:=a+1 to (s_start+s_count) do
//选择升序还是降序,sort为布尔类型
if tj_infor.value<tj_infor[min].value then
min:=b;
//数值互换
if min<>b then
begin
tj_temp.value:=tj_infor[a].value; //传递临时值
tj_temp.count:=tj_infor[a].count;
tj_infor[a].value:=tj_infor[min].value;
tj_infor[a].count:=tj_infor[min].count; //完成2数交换
tj_infor[min].value:=tj_temp.value;
tj_infor[min].count:=tj_temp.count;
end;
end;
s_temp:=tj_infor[s_find].count;
s_count:=1;//清零
s_start:=s_find;
// showmessage('count'+' '+inttostr(s_start));
end;
end;
欢迎光临狂风软件:[kuangfeng.51vip.cn] 狂风BLOGhttp://fengshilei.51vip.cn
==============================
见他人行善,随之心生欢喜,称为随喜。《法华经.随喜功德品》载,听闻经典而随喜,次次累积,功德至大。《大智度论》则谓,随喜者的功德,胜于行善者本人。又随己所喜,亦称随喜,如布施时,富者施金帛,贫者施水草,各随所喜,皆为随喜。
离线bbsxwk
发帖
26
金钱
0
威望
0
只看该作者 1 发表于: 2006-02-21
冒泡法就是交换次数太多
如果是普通类型还看不大出来
如果是大的结构体或类比较就很明显了
插入法相对来说好一些