日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单链表排序(冒泡排序)(C语言)

發布時間:2024/9/27 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单链表排序(冒泡排序)(C语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

優化版:

void SortList(PSListNode pHead) {if (NULL == pHead){return;}else{int flag = 0;PSListNode pTailNode = NULL;//當設置的尾節點與頭結點指向同一個節點時,說明只有一個元素為排序,那么冒泡完成while (pTailNode != pHead){PSListNode pPreNode = pHead;//每次參與比較的都是尾節點前面的結點while (pPreNode->pNextNode != pTailNode){PSListNode pCurNode = pPreNode->pNextNode;if (pPreNode->data > pCurNode->data){DataType dTemp = pPreNode->data;pPreNode->data = pCurNode->data;pCurNode->data = dTemp;flag = 1;}pPreNode = pPreNode->pNextNode;}//對冒泡的優化,只要有一趟比較沒有發生結點交換,說明冒泡完成,就可以退出冒泡的代碼塊了if (0 == flag){break;}pTailNode = pPreNode;}} }

最終優化版:

void SortList(PSListNode pHead) {if (NULL == pHead){return;}else{PSListNode pTailNode = NULL;PSListNode pFlagNode = NULL;//因為pFlagNode是記錄最后一次發生交換的兩個節點的前一個結點,理論上如果pFlagNode與pHead相等,//那么就說明鏈表只是最開始的兩個結點是無序的,那么第一次排序完成就不再排序,或者是第二種情況,pFlagNode//被置為pHead,要是第一趟排序完成,pFlagNide仍為pHead,就說明沒有發生交換,那么就不再進行排序while (pFlagNode != pHead){pTailNode = pFlagNode;pFlagNode = pHead;PSListNode pPreNode = pHead;while (pPreNode->pNextNode != pTailNode){PSListNode pCurNode = pPreNode->pNextNode;if (pPreNode->data > pCurNode->data){DataType dTemp = pPreNode->data;pPreNode->data = pCurNode->data;pCurNode->data = dTemp;//記住最后一次發生交換的地方pFlagNode = pPreNode->pNextNode;}pPreNode = pPreNode->pNextNode;}}} }

總結

以上是生活随笔為你收集整理的单链表排序(冒泡排序)(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。