使用迴圈和鍊錶完成的歸併排序

2021-10-06 09:00:49 字數 1219 閱讀 3888

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...