为什么这样冒泡不可以(高手请进)

flyfly2008 2009-11-24 04:43:10

//希望得到一个行数组,按某列数据值从小到小排序,
//frmQuery.DataRows 是一个行数组。
DataRow Tmpdrs = ds.Tables["s_production"].NewRow(); //增加一行对象
for (int i = 0; i < frmQuery.DataRows.Length; i++)
{
for (int j = i + 1; j < frmQuery.DataRows.Length; j++)
{
if ((int)frmQuery.DataRows[i].ItemArray[55] > (int)frmQuery.DataRows[j].ItemArray[55])
//比较行中一列(序号),按从小大的顺序排列。
{

Tmpdrs[0] = frmQuery.DataRows[i];
frmQuery.DataRows[i] = frmQuery.DataRows[j];
frmQuery.DataRows[j] = Tmpdrs[0];
}
}
}



整个过程,不会报错,只是得不到我想要结果。

希望高手能给出好的方法,指明原因!谢谢!

...全文
194 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomi_net 2009-11-25
  • 打赏
  • 举报
回复
根据楼主的代码来看,你这个算法不是冒泡排序吧,而是选择排序才对……
gghlkk 2009-11-25
  • 打赏
  • 举报
回复

//Tmpdrs[0] = frmQuery.DataRows[i];
Tmpdrs = frmQuery.DataRows[i];
frmQuery.DataRows[i] = frmQuery.DataRows[j];
//frmQuery.DataRows[j] = Tmpdrs[0];
frmQuery.DataRows[j] = Tmpdrs;
gghlkk 2009-11-25
  • 打赏
  • 举报
回复
//希望得到一个行数组,按某列数据值从小到小排序,
//frmQuery.DataRows 是一个行数组。
DataRow Tmpdrs = ds.Tables["s_production"].NewRow(); //增加一行对象
for (int i = 0; i < frmQuery.DataRows.Length; i++)
{
for (int j = i + 1; j < frmQuery.DataRows.Length; j++)
{
if ((int)frmQuery.DataRows[i].ItemArray[55] > (int)frmQuery.DataRows[j].ItemArray[55])
//比较行中一列(序号),按从小大的顺序排列。
{

//Tmpdrs[0] = frmQuery.DataRows[i];
Tmpdrs = frmQuery.DataRows[i];
frmQuery.DataRows[i] = frmQuery.DataRows[j];
//frmQuery.DataRows[j] = Tmpdrs[0];
frmQuery.DataRows[j] = Tmpdrs;
}
}
}
真相重于对错 2009-11-25
  • 打赏
  • 举报
回复
datatable.select("order by somecolumn desc or asc ")
flyfly2008 2009-11-25
  • 打赏
  • 举报
回复
我希望调整一个行数组里面行的顺序,不知道大家有没有明白我的意思!
flyfly2008 2009-11-25
  • 打赏
  • 举报
回复
看来大家没有理解我想说明问题!可能我没有表达清楚。我是想说明引用对象之间相互赋值,是不可以的
gghlkk 2009-11-24
  • 打赏
  • 举报
回复
Tmpdrs[0] = frmQuery.DataRows[i];

Row赋值给Cell

你确定是这样吗?
cqsfd 2009-11-24
  • 打赏
  • 举报
回复

j < frmQuery.DataRows.Length
确实没进入循环...
cqsfd 2009-11-24
  • 打赏
  • 举报
回复
粗略看了下代码
楼主这么做,每次找到的是最小的
但你i和j的取值范围有问题啊想不通的是居然没报错?
i < frmQuery.DataRows.Length,i最后的值是frmQuery.DataRows.Length-1,数组从0开始算,其实这时候i已经是数组最后一个元素位置了,j=i+1,这跑到哪去了,居然没提示你数组越界?
qqzeng-ip 2009-11-24
  • 打赏
  • 举报
回复
小到大

 for (int i = 0; i < frmQuery.DataRows.Length; i++) 
{
for (int j = 0; j < frmQuery.DataRows.Length - i; j++)
{
string a = frmQuery.DataRows[j];
frmQuery.DataRows[j] = frmQuery.DataRows[j + 1];
frmQuery.DataRows[j + 1] = a;
}
}
十八道胡同 2009-11-24
  • 打赏
  • 举报
回复
要自己写冒泡吗?很多控件都有sort的?这个sort也比自己写的冒泡快很多。。
lzsh0622 2009-11-24
  • 打赏
  • 举报
回复
楼主,你的写法可以优化:

DataTable dt = new DataTable();

// 第3行移到第0行
DataRow dr=dt.Rows[3];
dt.Rows[3].Delete();
dt.Rows.InsertAt(dr, 0);
zhujiazhi 2009-11-24
  • 打赏
  • 举报
回复
dataview.Sort
阿非 2009-11-24
  • 打赏
  • 举报
回复
可以借用 dataview 的 Sort 属性 用来排序
阿非 2009-11-24
  • 打赏
  • 举报
回复
Tmpdrs.ItemArray = frmQuery.DataRows[i].ItemArray;
frmQuery.DataRows[i].ItemArray = frmQuery.DataRows[j].ItemArray;
frmQuery.DataRows[j].ItemArray = Tmpdrs.ItemArray;
gwf25sz 2009-11-24
  • 打赏
  • 举报
回复
if ((int)frmQuery.DataRows[i].ItemArray[55] > (int)frmQuery.DataRows[j].ItemArray[55])

Tmpdrs[0] = frmQuery.DataRows[i];
frmQuery.DataRows[i] = frmQuery.DataRows[j];
frmQuery.DataRows[j] = Tmpdrs[0];

看着有点别扭··········
二维数组比较,每次拿 各行的56项来比较····
然后根据 各行的 第 56 项来为行排序······

如果你的确是这个意思的话,这个方法没错 ······ - -

不过 i < frmQuery.DataRows.Length 这里好像要 -1 吧~~~~~ 最后不要和自己比较吗???!!!

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧