超級排序難題,歡迎討論,有建設意見的就給分

l51 2005-06-30 05:58:39
現有一String字段內值為如下列表:
23.56.102.311
112.211.212.213
301.302.303.304
23.56.102.1111
1112.1115.1456.87920.456810

現在我想以這相字段為排序依據,並且排為如下形式
23.56.102.311
23.56.102.1111
112.211.212.213
301.302.303.304
1112.1115.1456.87920.456810
請問有何良方?數據庫是Access,不能使用存儲過程與觸發器。
...全文
188 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
l51 2005-08-31
  • 打赏
  • 举报
回复
問題還是沒有解決,homesos的也許在Access中可以執行,但是在 ASP+ADO中就不能執行了,因為不能執行Access的自定義函數,如果能執行Access的自定義函數的話,又何必這麼麻煩?我只要把23.56.102.311格式化成 00023.00056.00102.00311形式的 . 分割等長字段即可排序,又何來那麼多麻煩??

暈,這個壇子BUG 叢叢,結帖都有問題。
l51 2005-08-31
  • 打赏
  • 举报
回复
問題還是沒有解決,homesos的也許在Access中可以執行,但是在 ASP+ADO中就不能執行了,因為不能執行Access的自定義函數,如果能執行Access的自定義函數的話,又何必這麼麻煩?我只要把23.56.102.311格式化成 00023.00056.00102.00311形式的 . 分割等長字段即可排序,又何來那麼多麻煩??

暈,這個壇子BUG 叢叢,結帖都有問題。
humanity 2005-08-15
  • 打赏
  • 举报
回复
神经网络 这个词汇听起来太高深了,我闪。

不懂。
humanity 2005-08-15
  • 打赏
  • 举报
回复
Access 没用过,不知道自定义 函数 么?
okyzx 2005-08-11
  • 打赏
  • 举报
回复
试试楼上兄弟的吧
homesos 2005-08-09
  • 打赏
  • 举报
回复
偶写了一个,不知有没有问题,请大家多多指点
-------------------------------------
//得到字符串str中的第index组数字
private String getSomeString(String str, int index)
{
int tmp = 0;
for (int i=1; i<index; ++i)
{
if ((tmp = str.indexOf(".")) > 0)
{
str = str.substring(tmp+1);
}
else
{
return null;
}
}

if ((tmp = str.indexOf(".")) > 0)
{
str = str.substring(0, tmp);
}
return str;
}

//排序 字符串
public String[] sortArray(String[] s)
{
int nextIndex = 0;//轮到第几级数进行排序
int []len = new int[s.length];//存放数组成员中含有的int型个数
String temp = null;
int lenOfArray = s.length;
int maxNum = 0;

for (int i=0; i<lenOfArray; ++i)//计算某个字符串中含有的数字数量
{
for (int j=1; ; ++j)
{
if (this.getSomeString(s[i], j) != null)
{
continue;
}
else
{
len[i] = --j;
break;
}
}
}

for (int i=0; i<lenOfArray; ++i)//找出包含最多数字的数量
{
if (maxNum < len[i])
{
maxNum = len[i];
}
}


while (maxNum > ++nextIndex)
{
for (int i=1; i<lenOfArray; ++i)
{
if (len[i] < nextIndex)
{
continue;
}

for (int j=i-1; j>0; --j)
{
if (Integer.parseInt(getSomeString(s[j], nextIndex)) < Integer.parseInt(getSomeString(s[j-1], nextIndex)))
{
if (((nextIndex > 1) && getSomeString(s[j], nextIndex-1).equals(getSomeString(s[j-1], nextIndex-1))) || nextIndex <= 1)
{
//如果上级的数字相同或是这是第一次比较,则调换,否则不处理
temp = s[ j ];
s[ j ] = s[ j - 1 ];
s[ j - 1 ] = temp;
}
}
}
}
}

return s;
}

--------------------------------------
使用:
String[] s = new String[6];
s[0] = "23.56.102.311";
s[1] = "112.211.212.213";
s[2] = "301.302.303.304";
s[3] = "23.56.102.1111";
s[4] = "1112.1115.1456.87920.456810";
s[5] = "1112.1115.1456.87920.586481";
sortArray(s);//排序
A
homesos 2005-08-09
  • 打赏
  • 举报
回复
偶匆匆写了一个,不知有没有问题,请大家多多指点
-------------------------------------
//得到字符串str中的第index组数字
private String getSomeString(String str, int index)
{
int tmp = 0;
for (int i=1; i<index; ++i)
{
if ((tmp = str.indexOf(".")) > 0)
{
str = str.substring(tmp+1);
}
else
{
return null;
}
}

if ((tmp = str.indexOf(".")) > 0)
{
str = str.substring(0, tmp);
}
return str;
}
homesos 2005-08-09
  • 打赏
  • 举报
回复
偶写了一个,不知有没有问题,请大家多多指点
-------------------------------------
//得到字符串str中的第index组数字
private String getSomeString(String str, int index)
{
int tmp = 0;
for (int i=1; i<index; ++i)
{
if ((tmp = str.indexOf(".")) > 0)
{
str = str.substring(tmp+1);
}
else
{
return null;
}
}

if ((tmp = str.indexOf(".")) > 0)
{
str = str.substring(0, tmp);
}
return str;
}

//排序 字符串
public String[] sortArray(String[] s)
{
int nextIndex = 0;//轮到第几级数进行排序
int []len = new int[s.length];//存放数组成员中含有的int型个数
String temp = null;
int lenOfArray = s.length;
int maxNum = 0;

for (int i=0; i<lenOfArray; ++i)//计算某个字符串中含有的数字数量
{
for (int j=1; ; ++j)
{
if (this.getSomeString(s[i], j) != null)
{
continue;
}
else
{
len[i] = --j;
break;
}
}
}

for (int i=0; i<lenOfArray; ++i)//找出包含最多数字的数量
{
if (maxNum < len[i])
{
maxNum = len[i];
}
}


while (maxNum > ++nextIndex)
{
for (int i=1; i<lenOfArray; ++i)
{
if (len[i] < nextIndex)
{
continue;
}

for (int j=i-1; j>0; --j)
{
if (Integer.parseInt(getSomeString(s[j], nextIndex)) < Integer.parseInt(getSomeString(s[j-1], nextIndex)))
{
if (((nextIndex > 1) && getSomeString(s[j], nextIndex-1).equals(getSomeString(s[j-1], nextIndex-1))) || nextIndex <= 1)
{
//如果上级的数字相同或是这是第一次比较,则调换,否则不处理
temp = s[ j ];
s[ j ] = s[ j - 1 ];
s[ j - 1 ] = temp;
}
}
}
}
}

return s;
}

--------------------------------------
使用:
String[] s = new String[6];
s[0] = "23.56.102.311";
s[1] = "112.211.212.213";
s[2] = "301.302.303.304";
s[3] = "23.56.102.1111";
s[4] = "1112.1115.1456.87920.456810";
s[5] = "1112.1115.1456.87920.586481";
sortArray(s);//排序
A
zhenyang2002 2005-08-08
  • 打赏
  • 举报
回复
既然你都知道排序的思路是怎样的,这就是排序的算法啊,自己写个方法排序。
l51 2005-07-05
  • 打赏
  • 举报
回复
up
l51 2005-07-04
  • 打赏
  • 举报
回复
這是我對神經網絡算法的一個思路,還望懂算法的高手不嗇指教,謝謝!!
l51 2005-07-04
  • 打赏
  • 举报
回复
是這樣的,這個字段的值實際是以點分割的數值,我需要的就是將這些點分割的數值拆成整型,然後以整型的大小進行排序,不管後面有多少個數值,排序都以前面的數值開始,如第一位分別是 23/112/301/23/1112
那麼它們的排序就應先是 23/23/112/301/1112,
然後兩個23後面再取第二位進行排序,但因為第二位都是56,所以取第三位102,還不行;
再取第四位311和1111,因311小,所以311在前面。
yangbc 2005-07-02
  • 打赏
  • 举报
回复
你的数据不规范,sql语句完不成,想别的办法吧

259

社区成员

发帖
与我相关
我的任务
社区描述
其他产品/厂家
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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