package com.sort;
public
class
guibing
;sort
(arr);}
public
static
void
sort
(int
arr)
//開始迴圈歸併,每次迴圈完成乙個步長的合併
while
(true
) node[
] newarr =
newnode
[newlength]
;//開始合併鍊錶
for(
int i=
0,num=
0;inode no2 = noarr[i+1]
; node no3=
merge
(no1,no2)
; newarr[num]
= no3;
num++;}
//每次合併完,要將指向重新指為原來的鍊錶noarr
noarr=newarr;
//子鍊錶長度為一,結束歸併,排序已經拍好了
if(newlength==1)
break;}
system.out.
println
(noarr[0]
);}//兩個鍊錶的歸併操作
public
static node merge
(node no1,node no2)
else
//設定游標
node flag=result;
while
(no1!=null)
else
flag=flag.next;
}else
}//如果迴圈結束no1空了no2沒有,將no2剩下的節點全部加到要返回的鍊錶上即可
if(no2!=null)
//返回頭節點的指向
return result;
}}
node類如下:
package com.sort;
public
class
node
@override
public string tostring()
';}}
鍊錶歸併排序
include include include include include using namespace std typedef int type typedef struct nodetag node node build type a,int n pnode pnext null retu...
鍊錶歸併排序
主要思路 1 如果為null或者只有乙個節點那麼直接返回 2 將鍊錶分成兩部分,分別進行排序,形成兩個有序鍊錶 3 將兩個有序鍊錶合併 void merge sort struct node list void split struct node head,struct node lista,str...
鍊錶 歸併排序
時間複雜度o nlogn 空間複雜度o 1 include include 定義鍊錶 typedef struct listnode linklist linklist head null 建立鍊錶 linklist createlist int arr,int len rear next null...