多少年前,我就與你在一起,曾經把你儲存我電腦裡,
多少年後,積攢的東西太多,以至於找不到你了,
不知道,是你已經離開了我,還是我拋棄了你,
這次我把你放在這裡,願永遠伴我左右.....
說到排序,相信每乙個程式設計師沒有不知道的,就像走路吃飯一樣平常,當你多年來,一直沒有使用了,還能一次性code出來,
如果不能在心裡走一圈,非要debug的話,那她正在遠離你.....
我把排序歸為兩種,小資料列與大資料列。
小資料列,我分為氣泡排序、插入排序、選擇排序和希爾排序等,
大資料列, 我分為快速排序、歸併排序等
一、 小資料列
1、 氣泡排序:
基本原理:
1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3.針對所有的元素重複以上的步驟,除了最後乙個。
4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較
原始碼:
時間複雜度: o(n²)
2、插入排序
基本原理:
1.從第乙個元素開始,該元素可以認為已經被排序
2.取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
3.如果該元素(已排序)大於新元素,將該元素移到下一位置
4.重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
5.將新元素插入到該位置後
6.重複步驟2~5
原始碼:
時間複雜度:o(n)~o(n²)
3、選擇排序
基本原理:
首先在未排序序列中找到最小(大)元素,
存放到排序序列的起始位置,
然後,再從剩餘未排序元素中繼續尋找最小(大)元素,
然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢
原始碼:
時間複雜度:o(n²)
4、希爾排序
基本原理:
先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。
所有距離為d1的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序;
然後,取第二個增量d2即所有記錄放在同一組中進行直接插入排序為止
原始碼:
時間複雜度:o(nlog2^n)~o(n^1.5)
二、大資料列
1、快速排序
基本原理:
1.從數列中挑出乙個元素,稱為 "基準"(pivot)。
2.重新排序數列,所有元素比基準值小的擺放在基準前面,
所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。
在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。
3.遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
原始碼:
時間複雜度:o(nlogn)~o(n²)
2、歸併排序
基本原理:
1.申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列
2.設定兩個指標,最初位置分別為兩個已經排序序列的起始位置
3.比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置
4.重複步驟3直到某一指標達到序列尾
5.將另一串行剩下的所有元素直接複製到合併序列尾
原始碼:
時間複雜度:(n log n)/2 ~ nlog n - n + 1
如果我是你的女朋友
如果我是你的女朋友 如果我是你的女朋友,我會每天都跟你說我喜歡你,不為什麼就親親你 如果我是你的女朋友,我會做希奇古怪的東西,逼你當著我的面嘗一小口,就一小口 如果我是你的女朋友,我會要你拉著我的手過馬路,絕對不會看來往的車輛 如果我是你的女朋友,我會要你和我一起像小孩子一樣,手牽著手晃來晃去,不時...
如果我是你的女朋友
如果我是你的女朋友,我會只在你面前很笨,讓你驚喜地發現,原來在大家眼裡冰雪聰明的我,也會犯只有你知道的弱智錯誤。如果我是你女朋友,我會在吵架之後就買酒,然後乙個人坐在很高的地方看著遠方哭,如果是我錯了,你氣得要罵我,多貴的長途我都回答給你,然後靜靜的乖乖的聽你捨不得在教訓我的嘆氣聲,我則紅著臉咬著嘴...
我的男朋友是鋼鐵直男
我的男友是鋼鐵直男 是誰說過乙個鋼鐵直男也可以因為愛情,漸漸地變成乙個小奶狗的,如果這是真的,那我覺得我男朋友可能已經到了無可救藥的地步了。有的時候我也在懷疑,他是怎麼有的物件的呢?在戀愛中最折磨人的一件事,不是你愛上了乙個渣男,而是你喜歡上了乙個直男。如果你還想和直男好好談戀愛的話,那你絕對不能對...