鏈表排序-歸并

鏈表排序,可以插入排序,我就不寫了。

實現歸并排序

歸并排序(MERGE-SORT)是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為二路歸并。

?

歸并操作的工作原理如下:

第一步:申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列

第二步:設定兩個指針,最初位置分別為兩個已經排序序列的起始位置

第三步:比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置

重復步驟3直到某一指針超出序列尾

將另一序列剩下的所有元素直接復制到合并序列尾

數組排序參考

https://blog.csdn.net/hebtu666/article/details/81434236

快慢指針:快的一次動兩個,慢的一次一個,當快的到最后,慢的一定在中間。

自己手動模擬吧

/*考點:1. 快慢指針;2. 歸并排序。復雜度分析:T(n)            拆分 n/2, 歸并 n/2 ,一共是n/2 + n/2 = n/    \           以下依此類推:T(n/2) T(n/2)      一共是 n/2*2 = n/    \  /     \T(n/4) ...........   一共是 n/4*4 = n一共有logn層,故復雜度是 O(nlogn)*/
class Solution {
public:ListNode *sortList(ListNode *head) {if (!head || !head->next) return head;ListNode* p = head, *q = head->next;while(q && q->next) //快慢指針{p = p->next;q = q->next->next;}ListNode* left = sortList(p->next);//左右重復p->next = NULL;ListNode* right = sortList(head);return merge(left, right);}ListNode *merge(ListNode *left, ListNode *right) {ListNode dummy(0);ListNode *p = &dummy;while(left && right) {if(left->val < right->val) //小的放進來,指針向后{p->next = left;left = left->next;}else {p->next = right;right = right->next;}p = p->next;}if (left) p->next = left;//剩下的if (right) p->next = right;return dummy.next;}
};

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445574.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445574.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445574.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu麒麟下安裝并啟用搜狗輸入法

1.首先打開UK軟件&#xff0c;輸入搜狗尋找搜狗拼音軟件 然后下載搜狗拼音軟件 接著點擊啟動該軟件 2.點擊搜狗拼音的圖標&#xff0c;進入搜狗拼音的設置窗口 點擊高級&#xff0c;并打開FCITX設置 加入英語輸入法 3.這樣就可以進行中英文切換了

線性表表示集合

集合我們高中都學過吧&#xff1f; 最重要的幾個特點&#xff1a;元素不能重復、各個元素之間沒有關系、沒有順序 集合內的元素可以是單元素或者是集合。 對集合的操作&#xff1a;交集并集差集等&#xff0c;還有對自身的加減等。 需要頻繁的加減元素&#xff0c;所以順序…

家用無線路由器購買入門指南

視頻一&#xff1a;「白問」普通大眾 買路由器關注這幾個點就夠了 來源 例如商品名&#xff1a;AC 1200M 雙頻 AX前綴wifi6IEEE 802.11 AX AC前綴wifi5IEEE 802.11 AC AX比AC好 1200M 理論峰值 和網速無關 商家噱頭 MIMO SU-MIMO 單用戶多進多出&#xff08;早期&#xff…

ubuntu linux下執行.sh文件

ubuntu linux下執行.sh文件 首先&#xff0c;要確保這個文件的類型是可執行的。 有兩種辦法把文件設置為可執行文件。 1) 直接在文件屬性標簽中選中 "可執行"&#xff0c;--b 如果用的是圖形界面&#xff0c;這個方法最簡單直接。 2) 使用命令 chmod x file.sh。將可…

鏈表相交問題

本來想自己寫&#xff0c;寫了一半發現一篇文章&#xff0c;解釋寫得簡單易懂&#xff0c;我就直接拿過來了。 這個問題值得反復地寫&#xff0c;鍛煉鏈表coding能力的好題。 //如果兩個鏈表都不帶環 int NotCycleCheckCross(pLinkNode head1,pLinkNode head2) {pLinkNode lis…

用JS寫了一個模擬串行加法器

在重溫《編碼&#xff1a;隱匿在計算機軟硬件背后的語言》第12章——二進制加法器時&#xff0c;心血來潮用JS寫了一個模擬串行加法器。 測試斷言工具TestUtils.js function assertTrue(actual){if(!actual)throw "Error actual: " actual " is not true.&q…

Android學習路線總結

title: Android學習路線總結&#xff0c;絕對干貨 tags: Android學習路線,Android學習資料,怎么學習android grammar_cjkRuby: true --- 一、前言 不知不覺自己已經做了幾年開發了&#xff0c;由記得剛出來工作的時候感覺自己能牛X&#xff0c;現在回想起來感覺好無知。懂的越…

雙棧

利用棧底位置相對不變的特性&#xff0c;可以讓兩個順序棧共享一個空間。 具體實現方法大概有兩種&#xff1a; 一種是奇偶棧&#xff0c;就是所有下標為奇數的是一個棧&#xff0c;偶數是另一個棧。但是這樣一個棧的最大存儲就確定了&#xff0c;并沒有起到互補空缺的作用&a…

Error when loading the SDK:解決方案

錯誤情況&#xff1a; 當打開eclipse時出現如下窗口&#xff08;內容如下&#xff09; Error when loading the SDK: Error: Error parsing \Android\adt-bundle-windows-x86_64-20140702\sdk\system-images\android-22\android-wear\armeabi-v7a\devices.xml cvc-complex-type…

單調隊列優化的背包問題

對于背包問題&#xff0c;經典的背包九講已經講的很明白了&#xff0c;本來就不打算寫這方面問題了。 但是吧。 我發現&#xff0c;那個最出名的九講竟然沒寫隊列優化的背包。。。。 那我必須寫一下咯嘿嘿&#xff0c;這么好的思想。 我們回顧一下背包問題吧。 01背包問題 …

用Python去除掃描型PDF中的水印

內容概述 含水印掃描型PDF文件&#xff0c;其中某頁如下圖所示&#xff0c;用Python去除其頁頂及頁底的水印。 處理思路&#xff1a;PDF中的每一頁的水印的相對位置基本相同&#xff0c;將PDF每一頁輸出成圖片&#xff0c;然后進行圖片編輯&#xff0c;用白色填充方形覆蓋水印…

鏈表實現棧

棧&#xff0c;是操作受限的線性表&#xff0c;只能在一端進行插入刪除。 其實就是帶尾指針的鏈表&#xff0c;尾插 #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define Status int #define SElemType int //只在頭部進行插入和刪除(…

二階有源濾波器

濾波器是一種使用信號通過而同時抑制無用頻率信號的電子裝置, 在信息處理、數據傳送和抑制干擾等自動控制、通信及其它電子系統中應用廣泛。濾波一般可分為有源濾波和無源濾波, 有源濾波可以使幅頻特性比較陡峭, 而無源濾波設計簡單易行, 但幅頻特性不如濾波器, 而且體積較大。…

用JS寫了一個30分鐘倒計時器

效果圖 額外功能 左鍵單擊計時器數字區&#xff0c;不顯示或顯示秒鐘區。左鍵雙擊計時器數字區&#xff0c;暫停或啟動計時器。計時完畢&#xff0c;只能刷新頁面啟動計時器。輸入框可輸入備注信息&#xff0c;輸入框失去焦點或計時完畢后&#xff0c;時間戳附帶備注信息會存入…

為什么高手離不了Linux系統?我想這就是理由!

通過本文來記錄下我在Linux系統的學習經歷&#xff0c;聊聊我為什么離不了Linux系統&#xff0c;同時也為那些想要嘗試Linux而又有所顧忌的用戶答疑解惑&#xff0c;下面將為你介紹我所喜歡的Linux系統&#xff0c;這里有一些你應該知道并為之自豪的事實。 這里你應該首先拋開W…

python學習實例(1)

# #1.2 計算機編程的基本概念 ## #1.2.2 從Python語言進入計算機語言的世界 ##<程序&#xff1a;例子1> def F(x,y):return(x*xy*y) print("F(2,2)",F(2,2)) print("F(3,2)",F(3,2))#<程序&#xff1a;例子2> def Pr():for i in range(0,10)…

用JS寫一個電影《黑客帝國》顯示屏黑底綠字雨風格的唐詩欣賞器

效果圖 放碼過來 <!DOCTYPE HTML> <html><head><meta http-equiv"Content-Type" content"text/html;charsetutf-8"/><title>Black Screen And Green Characters</title><style type"text/css">table…

python學習實例(2)

# #2.2 不同進制間的轉換 ## #2.2.1. 二進制數轉換為十進制數 ##<程序&#xff1a;2-to-10進制轉換> binput("Please enter a binary number:") d0; for i in range(0,len(b)):if b[i] 1:weight 2**(len(b)-i-1)d dweight; print(d)#<程序&#xff1a;改…

元器件封裝大全:圖解+文字詳述

先圖解如下&#xff1a; 元器件封裝類型&#xff1a; A.Axial  軸狀的封裝&#xff08;電阻的封裝&#xff09;AGP &#xff08;Accelerate raphical Port&#xff09; 加速圖形接口 AMR(Audio/MODEM Riser) 聲音/調制解調器插卡BBGA&#xff08;Ball Grid Array&#xff09;…

python學習實例(3)

# #3.4 關于Python的函數調用 ## #3.4.2 Python函數入門 ##<程序&#xff1a;計算43*22> #函數f def f(x, y):return x*y*y#主函數部分 c4f(3, 2) print (c)# #3.4.3 局部變量(Local variables)與全局變量(Global variables) ##<程序&#xff1a;打印局部變量a和全局…