時間複雜度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 ...