單鏈表---直接插入排序

####記錄####

在鏈表中解決從小到大排序的問題!

解決這個問題的方法很多

直接排序

代碼:

#include<stdio.h>

#include<stdlib.h>

typedef struct lNode

{

int data;

struct lNode *next;

}linklist;


linklist *create( linklist *L, int a[], int length )

{

linklist *r, *s;

int i;

L = ( linklist * )malloc( sizeof( linklist ) );

r = L;

for( i=0; i<length; i++ )

{

s = ( linklist * )malloc( sizeof( linklist ) );

s->data = a[i];

r->next = s;

r = s;

}

r->next = NULL;

return L;

}

/*here we sort the linklist from min to max*/

linklist *sort( linklist *L )

{

linklist *p, *q, *pre;

p = L->next->next;

L->next->next = NULL;/*cut the second node*/

while( p!=NULL )

{

pre = L;

q = p->next;

while( pre->next != NULL && pre->next->data < p->data )

pre = pre->next;

p->next = pre->next;

pre->next = p;

p = q;

}

return L;

}

void display( linklist *L )

{

linklist *p = L->next;

while( p->next != NULL )

{

printf("%d ",p->data);

p = p->next;

}

printf("%d\n",p->data);

}

int main()

{

int a[6] = {3,1,2,5,23,9};

int length = 6;

linklist *p,*L;

p = create( L, a, length );

display( p );

sort( p );

display( p );

return 0;

}

————————分割線—————————————

在第二個節點處截斷,把第一個節點和第二個節點比較,小的排在大的前面。

pre指針再次回到L節點。

這裏就有了一個思想就是截斷鏈表,然後和前面的節點來作比較,找到比這個節點小的,就插入到相應的位置。依次截斷後續節點,再和前面的節點來作比較,插入相應的位置

發佈了31 篇原創文章 · 獲贊 1 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章