Hast du wieder vertippt? 啊:mad:气气啦, 为甚么呀, 总传成这副德性:confused:
干脆口述吧: 就是for 一下,dann wird int i mit 1 inizializiert und je nach durchlaufen um 1 erhoeht bis es die laenge dieses arrays minus 1 erreicht.
im schleifeninneren :x= a; l=0;....... bitte schreib mal den vollständige Code. public static void magic (int [] a){
int l, r, m, x;
for ( int i=1; i< a.length;){
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;
}} 我都没话了, 明明没打那个;) 嘛 ;) change to ;i++ ) 最后那个for循环就是把所有的元素顺序移一次位,比如a=a,a=...
依次类推最后缺一个的数组也就是上面while循环里面比较出来最大的数组再补上。 可它这么一移, 空缺的总是第一个位置呀?:confused: , 而while 里选出的那个位置 不一定是第一个呀 我想你最后一个for循环是抄错了,应该是
for (int j =i-l; j>=l; j--) {
a = a;
}
前面的while循环,是二分法比较,最后我们得到的是x在它的前位数组里的有效位置,这个位置最后是用l来表示的。那么之后的for循环做的功能就是把从l到i-1位置的元素向后顺移,然后空出l的位置给x。这种排序方法类似于插入排序,只是比较模块用了二分法。其实我感觉并不是很好,komplexzeit比不上快速排序和希尔排序。
页:
1
[2]