快速排序
快速排序(Quicksort)是對冒泡排序的一種改進摸航。它的基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分端三,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小笤昨,然后再按此方法對這兩部分數(shù)據(jù)分別進行快速排序寸痢,整個排序過程可以遞歸進行书闸,以此達到整個數(shù)據(jù)變成有序序列。
冒泡排序
冒泡排序(Bubble Sort)亥宿,是一種計算機科學領(lǐng)域的較簡單的排序算法卸勺。它重復地走訪過要排序的數(shù)列,一次比較兩個元素烫扼,如果他們的順序錯誤就把他們交換過來曙求。走訪數(shù)列的工作是重復地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成映企。
選擇排序
選擇排序(Selection sort)是一種簡單直觀的排序算法悟狱。它的工作原理是每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個元素堰氓,存放在序列的起始位置芽淡,直到全部待排序的數(shù)據(jù)元素排完。 選擇排序是不穩(wěn)定的排序方法(比如序列[5豆赏, 5挣菲, 3]第一次就將第一個[5]與[3]交換,導致第一個5挪動到第二個5后面)掷邦。
插入排序
插入排序的基本思想是:每步將一個待排序的紀錄白胀,按其關(guān)鍵碼值的大小插入前面已經(jīng)排序的文件中適當位置上,直到全部插入完為止抚岗。
有一個已經(jīng)有序的數(shù)據(jù)序列或杠,要求在這個已經(jīng)排好的數(shù)據(jù)序列中插入一個數(shù),但要求插入后此數(shù)據(jù)序列仍然有序宣蔚,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將一個數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中向抢,從而得到一個新的认境、個數(shù)加一的有序數(shù)據(jù),算法適用于少量數(shù)據(jù)的排序挟鸠,時間復雜度為O(n^2)叉信。是穩(wěn)定的排序方法。插入算法把要排序的數(shù)組分成兩部分:第一部分包含了這個數(shù)組的所有元素艘希,但將最后一個元素除外(讓數(shù)組多一個空間才有插入的位置)硼身,而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成后覆享,再將這個最后元素插入到已排好序的第一部分中佳遂。
1.基本概念
1.1穩(wěn)定排序(stable sort)和非穩(wěn)定排序
穩(wěn)定排序是所有相等的數(shù)經(jīng)過某種排序方法后,仍能保持它們在排序之前的相對次序撒顿,丑罪。反之,就是非穩(wěn)定的排序凤壁。
比如:一組數(shù)排序前是a1,a2,a3,a4,a5巍糯,其中a2=a4,經(jīng)過某種排序后為a1,a2,a4,a3,a5客扎,
則我們說這種排序是穩(wěn)定的,因為a2排序前在a4的前面罚斗,排序后它還是在a4的前面徙鱼。假如變成a1,a4,a2,a3,a5就不是穩(wěn)定的了。
1.2內(nèi)排序( internal sorting )和外排序( external sorting)
在排序過程中针姿,所有需要排序的數(shù)都在內(nèi)存袱吆,并在內(nèi)存中調(diào)整它們的存儲順序侍瑟,稱為內(nèi)排序夷蚊;在排序過程中,只有部分數(shù)被調(diào)入內(nèi)存耕腾,并借助內(nèi)存調(diào)整數(shù)在外存中的存放順序排序方法稱為外排序榕暇。
1.3算法的時間復雜度和空間復雜度
所謂算法的時間復雜度蓬衡,是指執(zhí)行算法所需要的計算工作量。一個算法的空間復雜度彤枢,一般是指執(zhí)行這個算法所需要的內(nèi)存空間狰晚。