Re: [問題] 以quicksort實現linked list的排序...
※ 引述《chizhang (JON)》之銘言:
: 遇到的問題: (題意請描述清楚)
: 若限定函式, 以quicksort對linled list排序
: tydefdf struct node{
: int data;
: struct node *next;
: }NODE;
: NODE *quicksort(NODE *list)
: {
: ?????
: }
: 希望得到的正確結果:
: 有試著撰寫, 但就是怪怪的
: 程式跑出來的錯誤結果:
: 是有成功的樣子, 但感覺就是怪怪的
: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
: Dev-C++
: 有問題的code: (請善用置底文標色功能)
: 以下是我所寫的程式碼 :
: NODE *quicksort(NODE *list)
: {
: NODE *left, *right, *last;
: POLY_NODE *p;
: int i = 0;
: if(list == NULL)
: return list;
: else
: {
: left = right = list;
: last = left;
: }
: while(right->next != NULL)
: right = right->next;
: for(p = left->next; p != NULL; p = p->next)
: {
: if(p->data < left->data)
: {
: last = last->next;
: SWAP(last->data, p->data);
: i++;
: }
: }
: SWAP(left->data, last->data);
:
________________________________________
| |
| if(i != 0) |
| left = NodeQsort(left); |
| if(last != right) |
| last = NodeQsort(last->next); |
|________________________________________| 原程式...
:
: return list;
: }
: 補充說明:
: 希望能給予指教
: 或是有夠好的寫法
: 感謝
現將框框裡的程式碼改為
if(left != last)
left = NodeQsort(left);
else if(right->data > last->data)
left = NodeQsort(last->next);
想了一晚, 不知道有沒有比邏輯??
另外感謝 loveme00835 大大幫忙寫了一個程式
只是題目要求, 所以函式的 return type 與引數的部分都已經限定
不國, 還是很感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.219.228.160
※ 編輯: chizhang 來自: 61.219.228.160 (11/25 13:52)
→
11/25 13:53, , 1F
11/25 13:53, 1F
※ 編輯: chizhang 來自: 61.219.228.160 (11/25 13:56)
→
11/25 15:31, , 2F
11/25 15:31, 2F
→
11/25 16:05, , 3F
11/25 16:05, 3F
→
11/25 16:06, , 4F
11/25 16:06, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):