鍊錶 歸併排序

2021-08-22 01:15:34 字數 1193 閱讀 7216

時間複雜度o(nlogn),空間複雜度o(1)

#include#include //定義鍊錶

typedef struct listnode

linklist;

linklist *head = null;

//建立鍊錶

linklist*createlist(int *arr, int len)

rear->next = null;

return head;

}//列印鍊錶

void showlist(linklist* p)

printf("\n");

}//歸併排序

linklist* mergesortedlist(linklist* h1, linklist* h2)

else

linklist* temp = newhead;

//比較大小,並將鍊錶排序

while (h1 && h2)

else

}//如果其中乙個鍊錶還沒排完,則把剩下的節點連線在已排好的鍊錶即可

while (h1)

while (h2)

return newhead;

}linklist *mergesort(linklist *head)

linklist* lefthead = head;

linklist* righthead = slow->next;

//slow下乙個節點必須是null,因為它是指向鍊錶尾

slow->next = null;

//將左邊、右邊鍊錶排好

lefthead = mergesort(lefthead);

righthead = mergesort(righthead);

//最後再返回合併後的鍊錶

return mergesortedlist(lefthead, righthead);

}//主函式

int main()

; createlist(array, sizeof(array) / sizeof(array[0]));

showlist(head->next);

linklist *head1 = mergesort(head->next);

showlist(head1);

return 0;

}

鍊錶歸併排序

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 n log n 的時間內使用常數級空間複雜度對鍊錶進行排序。示例1輸入 複製返回值 複製說明 本題目包含複雜資料結構listnode,點此檢視相關資訊 define null null define node listnode class solution int len node ...