冒泡演算法(C語言實現)

來源:互聯網
上載者:User

在書上傳錄下面的代碼,進行學習。

 

#include <studio.h>/*標頭檔*/<br />/*自訂資料類型 NODE, 用於表示每一個待排序的資料*/<br />typedef struct node<br />{<br />int data;<br />struct node *next;//下一個節點的指標<br />struct node *prev;//上一個節點的指標<br />} NODE;<br />/*插入新節點node至雙向鏈表 head中*/<br />insertLt(NODE *head, NODE *node)<br />{<br />/*鏈表為空白,以要插入的節點為前端節點*/<br />if (*head == NULL)/*第一個節點*/<br />{<br />(*head) = node;/*以新節點為鏈表頭*/<br />(*head)->next = NULL;/*後續節點為空白*/<br />(*head)->pre = NULL;/*前序節點為空白*/<br />} else {/*鏈表非空,將新加入的節點作為前端節點,插入鏈表的頭部*/<br />node->next = *head;/*新節點插入鏈表的頭部*/<br />(*head)->pre = node;<br />(*head) = node;<br />(*head)->pre = NULL;<br />}<br />}<br />/*一趟冒泡排序的函數,從鏈表的第一個節點開始比較,直到node節點結束*/<br />PerBubble(NODE *head, NODE *node)<br />{<br />NODE *tmp, *p;//臨時變數定義<br />int n;<br />for (tmp = head; tmp != node; tmp=tmp->next)//從第一個節點開始比較,到節點結束<br />{<br />if (tmp->next == NULL)break;<br />/*如果當前值大於後續節點的值,交換兩個節點*/<br />if (tmp->data > tmp->next->data)<br />{<br />n = tmp->data;<br />tmp->data = tmp->next->data;<br />tmp->next->data = n;<br />}<br />}<br />}<br />/*冒泡排序演算法函數 head為待排序的鏈表*/<br />BubbleSort(NODE *head)<br />{<br />NODE *tmp = NULL<br />for (tmp = head; tmp->next != NULL; )//尋找雙向鏈表的最後一個節點<br />tmp = tmp->next;<br />/*從最後一個節點開始,一直到第一個元素,分別進行一趟排序過程*/<br />for (; tmp != NULL; tmp = tmp->pre)<br />{<br />PerBubble(head, tmp);//調用排序函數<br />}<br />}<br />main()<br />{<br />int n;/*迴圈變數定義*/<br />NODE *head = NULL;/*鏈表的頭指標,初始化為空白*/<br />NODE *tmp, *p;/*指標變數,臨時儲存NODE變數的指標*/<br />for(;;;)/*迴圈調用從鍵盤輸入的資料,根據輸入的資料簡曆雙向鏈表,輸入負數則退出迴圈*/<br />{<br />scanf("%d", &n);//從標準輸入裝置輸入一個整數<br />if (n < 0) break;<br />tmp = (NODE *)malloc(sizeof(NODE));//動態申請記憶體<br />memset(tmp, 0x00, sizeof(tmp));//清空申請的記憶體<br />tmp->data = n;//儲存輸入的值<br />tmp->next = NULL;<br />tmp->pre = NULL;<br />insertLt(&head; tmp);<br />}<br />BubbleSort(head);<br />for (tmp = head; tmp != NULL; //迴圈輸出排序後的結果,同時釋放動態申請的記憶體變數<br />{<br />printf("%d/n", tmp->data);<br />p = tmp;<br />tmp = tmp->next;//跳轉至下一結點<br />p->next = NULL;<br />free(p);//釋放記憶體<br />}<br />} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.