- 论坛徽章:
- 0
|
本帖最后由 hbmhalley 于 2012-11-20 21:23 编辑
回复 36# pmerofc
没必要拆成这么多吧 .. 看着累- #include <stdio.h>
- #include <stdlib.h>
- typedef struct _node_t {
- int w ;
- struct _node_t *n ;
- } node_t ;
- node_t *head = NULL ;
- void ins (int k) {
- node_t *t = malloc (sizeof(node_t)) ;
- t->w = k ;
- t->n = head ;
- head = t ;
- }
- void print () {
- node_t *t ;
- for (t = head ; t != NULL ; t = t->n) {
- printf ("%d\n" , t->w) ;
- }
- puts ("") ;
- }
- void sort_bubble () {
- node_t **i ;
- int flag ;
- do {
- flag = 0 ;
- for (i = &head ; (*i)->n != NULL ; i = &(*i)->n) {
- node_t *j = (*i)->n ;
- if ((*i)->w > j->w) {
- flag = 1 ;
- (*i)->n = j->n ;
- j->n = *i ;
- *i = j ;
- }
- }
- } while (flag) ;
- }
- void sort_insert () {
- node_t *nhead = NULL , *i , *next , **j ;
- for (i = head ; i != NULL ; i = next) {
- next = i->n ;
- for (j = &nhead ; *j != NULL && (*j)->w < i->w ; j = &(*j)->n)
- ;
- i->n = *j ;
- *j = i ;
- }
- head = nhead ;
- }
- int main () {
- int t ;
- while (scanf ("%d" , &t) == 1) {
- ins (t) ;
- }
- print () ;
- sort_insert () ;
- print () ;
- return 0 ;
- }
复制代码 正好对比一下.
相对应用于数组的同类算法, 插入排序确实显示出链表的优势 ( i->n = *j ; *j = i ; ) 虽然对复杂度无影响
冒泡虽没有插入排序的简洁, 但代码结构与数组上的冒泡并无太大差别 (flag / for_all / 三行swap)
代码长度差距不大. |
|