大數據常用基本算法


1、冒泡排序

冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序算法
它重復地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序(如從大
到小、首字母從A到Z)錯誤就把他們交換過來。走訪元素的工作是重復地進行直到沒有
相鄰元素需要交換,也就是說該元素已經排序完成
這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端(升序或降序
排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“冒泡排序”
冒泡排序算法的原理如下:
1)比較相鄰的元素。如果第一個比第二個大,就交換他們兩個
2)對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后
的元素應該會是最大的數
3)針對所有的元素重復以上的步驟,除了最后一個
4)持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較
列如:
數組元素>
5 1 7 2 6 4 3 16
1)由於第一個元素5比第二個元素大1,交換它們的位置。
1 5 7 2 6 4 3 16
2)對比每個相鄰的元素,此時到第二個元素5與第三個元素7,不交換位置
1 5 7 2 6 4 3 16
3)對比每個相鄰的元素,此時到第三個元素7與第四個元素2,交換位置
1 5 2 7 6 4 3 16
4)對比每個相鄰的元素,此時到第四個元素7與第五個元素6,交換位置
1 5 2 6 7 4 3 16
5)對比每個相鄰的元素,此時到第五個元素7與第六個元素4,交換位置
1 5 2 6 4 7 3 16
6)對比每個相鄰的元素,此時到第六個元素7與第七個元素3,交換位置
1 5 2 6 4 3 7 16
6)對比每個相鄰的元素,此時到第七個元素7與第八個元素16,不換位置
1 5 2 6 4 3 7 16

2、雙冒泡排序

雙向冒泡算法,極大的減少了循環排序的次數
1)傳統冒泡氣泡排序的雙向進行,先讓氣泡排序由左向右進行,再來讓氣泡排序由右往
左進行,如此完成一次排序的動作
2)使用left與right兩個旗標來記錄左右兩端已排序的元素位置
3)當往左遞進left >=往右遞進的 right時,則排序完成
例子如下所示:
排序前:45 19 77 81 13 28 18 19 77 11
往右排序:19 45 77 13 28 18 19 77 11 [81]
向左排序:[11] 19 45 77 13 28 18 19 77 [81]
往右排序:[11] 19 45 13 28 18 19 [77 77 81]
向左排序:[11 13] 19 45 18 28 19 [77 77 81]
往右排序:[11 13] 19 18 28 19 [45 77 77 81]
向左排序:[11 13 18] 19 19 28 [45 77 77 81]
往右排序:[11 13 18] 19 19 [28 45 77 77 81]
向左排序:[11 13 18 19 19] [28 45 77 77 81]
此時28>=19條件成立排序完成

3、快速排序

快速排序(Quicksort)是對冒泡排序的一種改進
快速排序的基本思想:首先選取一個記錄作為樞(shu)軸,不失一般性,可選第一個記
錄,依它的關鍵字為基准重排其余記錄,將所有關鍵字比它大的記錄都安置在它之后,而將所有關鍵字比它小的記錄都安置在之前,由此完成一趟快速排序;之后,分別對由一趟排序分割成的兩個子序列進行快速排序,在大數據情況下要使用快速排序
列如:
數組元素>
5 1 7 2 6 4 3 16
思路:
取第一個數,把小於它的數往左移動,把大於它的數右移動
1)最左側大於5的為7,最右側小於5的為3,7與3對調
以5為樞軸>
5 1 3 2 6 4 7 16
2)全部對調完成,此時左側小於5,右邊大於5
5 1 3 2 | 6 4 7 16
3)5移動到分割位置
1 3 2 5 6 4 7 16
4)如果把數組元素分為三部分的話 左側<中間<右側
1 3 2 | 5 | 6 4 7 16
此時只需對兩側再重復以上操作就可以了
5)重復以上操作
1 3 2 >
1 2 3
此時左側
6 4 7 16 >
4 6 7 16
簡單來說:定義基數,比它小的往左排,比它大的往右排

4、歸並排序

歸並排序(MERGESORT)
是建立在歸並操作上的一種有效的排序算法,該算法是采用
分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合並,得到
完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合並
成一個有序表,稱為二路歸並
歸並操作(merge),也叫歸並算法,指的是將兩個順序序列合並成一個順序序列的方法
如 設有數列1 8 2 9 3 5 6 4 10
1)第一次歸並后:{1 8},{2 9},{ 3 5},{ 4 6},{10}此時兩兩元素排序完的歸並
2)第二次歸並后:{1 2 8 9},{ 3 4 5 6} ,{10}此時兩兩元素歸並
1與2 尋找最小數 1
8與2 尋找最小數 2
8與9尋找最小數 8
{1 2 8 9}
3)第三次歸並后:{1 2 3 4 5 6 8 9} , {10}此時兩兩元素歸並
1與3尋找到最小數1 {1}
2與3尋找最小數2 {1 2}
8與3尋找最小數3 {1 2 3}
8與4尋找最小數4 {1 2 3 4}
8與5尋找最小數5 {1 2 3 4 5}
8與6尋找最小數6 {1 2 3 4 5 6}
8 9 落下{1 2 3 4 5 6 8 9}
4)第四次歸並后:{1 2 3 4 5 6 8 9 10}
思路:循環找到最小值落下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM