two steps 发表于 2003-5-31 21:09

请问数组能这么用么, 我晕晕呼呼

merge 是以有的一个函数, 可将两个已经sortiete arrays 合并到一起, 返回的也是一个array,然后让编这个mergesort(int [] a),只许iterativ。

public static void mergesort(int[] a){
      int [] x1={a};
      int [] x2={a};
      int [] c = merge(x1, x2);
      int i=2;
      while (i<a.length){
            int [] b={a};
            int [] temp =merge(c,b);
            c=temp;
            i++;
      }
    }

我总觉得 c= temp那里比较别扭, 长度上,但又不知怎么该:(

文选流氓 发表于 2003-5-31 21:54

呵呵,不好意思,本想让你的源程序正常显示,所以编辑了一下你的主贴,可惜没成功:(

我没弄明白你为何那样声明x1,x2两个数组,对于整个程序来说,似乎没什么意义(我猜想你只是为了在声明c的时候可以使用一下merge这个方法)。至于在while循环里的这两句:
            int [] temp =merge(c,b);
            c=temp;
我觉得你可以用 c = merge(c,b);代替。整个程序改成这样怎么样?

public static void mergesort(int [] a)
{
       int c[] = new int;
       int i = 0;
      while( i < a.length)
      {
         int x = { a(i)};
         c = merge(c,x);
         i++;
       }
}


array的长度一旦确定,是无法更改的,用arrylist或者arry.add(i)方法要更方便一些。

two steps 发表于 2003-5-31 22:09

:D 谢谢, 给你鞠躬了。;)   再提一个问题成不? 什么叫shellsort?
谢谢你的建议用arraylist or array.add(i), 可惜我不懂:(

文选流氓 发表于 2003-5-31 23:59

不用客气:)

shellsort我不清楚:(。

事实上我刚才写的那几个句子,只是把a数组中的数据一个一个放进c数组里,跟sort是没什么关系的。用array.add()方法也可以实现:把while里的前两句替换成c.add(a);就行了,不需要x数组。

Array有自带一个sort方法:Arrays.sort(arrays)
具体用法你可以在Java API里查到:java.util.Arrays
[http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html

ArrayList到底是个什么东西我说不清楚,只知道它的长度是可以更改的,可以随意(同时)地放任何类型的数据进去。不过它跟你这个题目没什么关系,我也只是随口提了一句,呵呵。

musicbug 发表于 2003-6-1 00:14

Shellsort
   

Shellsort ist eines der am l&auml;ngsten bekannten Sortierverfahren (benannt nach seinem Urheber D.L. Shell ). Es ist sehr schnell, einfach zu verstehen und einfach zu implementieren, allerdings ist seine Analyse etwas aufwendiger.

http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/shell/shell.htm

文选流氓 发表于 2003-6-1 00:19

hmmm, 不错不错,谢谢:)

two steps 发表于 2003-6-1 11:52

wonderbar:D :D 现在正在讲各种sortiereverfahren....昨天贴的那是作业中的一道, 我不会:( 。
还有一个变态 sort 如下:
public static void magic (int [] a){
    int l, r, m, x;
    for ( int i=1; i<a.length; i++){
      x=a;
      l=0;
      r=i-1;
      while ( l<= r) {
            m= (l+r)/2;
            if (x<=a){r=m-1;}
            else {l=m+1;}
      }
      for (int j =i-1; j>=1; j--) {
            a = a;
      }
      a=x;   
   }
然后说:Wenden Sie den obigen Algorithmus "per Hand" auf das folgende Feld an : " 23, 17,46, 67, 19, 2, 11, 8 ".....(blablabla)
我老老实实的按着程序去折腾折腾这串数。。。对最后那个for-schleife 大惑不解:confused:能再帮帮我么? thanks for advance;)

musicbug 发表于 2003-6-1 12:20

你第一个for循环是什么?是不是写错?

two steps 发表于 2003-6-1 13:02

xixi...sorry:D 是打错了, 更正:
for (int i=1; i<a.length; i++){
      x=a;
      l=0;
...........:o

two steps 发表于 2003-6-1 13:04

for ( int i=1; i<a.length; i++){
    x= a;
    l= 0;

.......
页: [1] 2
查看完整版本: 请问数组能这么用么, 我晕晕呼呼