單鏈表的排序

2021-07-07 02:51:45 字數 1248 閱讀 6261

/*單鏈表結點資料結構*/

typedef struct node

node_t, *list_t;

1移動結點上的值

1.1

選擇排序(時間複雜度為

o(n^2))

void list_select_sort(list_t h)

}s->key = p->key;

p->key = min;

}return ;

}

1.2

快速排序(時間複雜度為

o(nlogn))

宣告兩個指標p和

q,兩個指標均往

next

方向移動,移動過程中保持

p之前的

key都小於選定的

key,p和

q之間的

key都大於選定的

key,則當

q走到末尾的時候便完成了一次支點的尋找。

/*交換資料*/

void swap(int *n, int *m)

/*分割槽操作*/

list_t partion(list_t bgn, list_t end)

q = q->next;

}swap(&p->key, &bgn->key);

return p;

}/*快速排序*/

void list_quick_sort(list_t bgn, list_t end)

}

2

移動結點

類似快速排序,採用遞迴分治方法進行排序的,每次對原有的鍊錶進行一次劃分,每次劃分取鍊錶的左端的那個結點值作為樞軸,將小於樞軸的值用

t1 指標連線起來,將大於樞軸的值用

t2 指標連線起來,然後在分別對這

2 個短的鍊錶進行遞迴排序。

list_t qsortl(list_t h, list_t lnext)  

else

}t1->next = t2->next = null;

h->next = qsortl(n2.next,lnext);

return qsortl(n1.next, h);

}







單鏈表之排序單鏈表

package list public class sortedsinglylist extends singlylist 將values陣列中的所有物件按值大小插入 public sortedsinglylist t values 過載深拷貝,由單鏈表構建排序單鏈表 public sortedsi...

單鏈表的排序

這是前幾天hottey面試的乙個題目 不借助外部陣列,只對鍊錶本身進行操作來完成排序。我覺得甚有意思,便實現了乙個。程式 如下 include using namespace std template struct node 節點結構 template class slist 單鏈表結構 slist...

單鏈表的排序

歸併排序的一種比較快的排序,尤其在鍊錶中,在所有排序中是時間複雜度為nlog n 級別的有三種,分別為快速排序,堆排序和歸併排序,但是快速排序在單鏈表中沒有優勢 適合於雙向鍊錶 同樣堆排序在建堆和調整堆得過程對於單鏈表也是比較麻煩,這裡我們選取了歸併排序。歸併排序的概念和原理我就不介紹了,網上的相關...