四種常見演算法(冒泡,選擇,插入,快速)及分析

2021-09-29 09:39:25 字數 3785 閱讀 5237

今天總結一下經常遇到的四種演算法

第一種:氣泡排序

/*

* 排序思想:

1. 比較相鄰的元素。如果第乙個比第二個大(公升序),就交換他們兩個。

2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步 做完後,最後的元素會是最大的數。

3. 針對所有的元素重複以上的步驟,除了最後乙個。

4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要 比較為止。

*/public

class

maopaosort

public

static

int[

]msort

(int

arr)}}

return arr;

}public

static

void

main

(string[

] args)

;for

(int i=

0;i<

10;i++)}

}

第二種:選擇排序

/*

* 選擇排序是一種簡單直觀的排序演算法,工作原理為:在未排序的序列中找出最小(大)元素與第乙個位置的元素交換位置

注意選擇排序與氣泡排序的區別:氣泡排序通過依次交換相鄰兩個順序不合法的元素位置,從而將當前最小(大)元素放到合適的位置;而選擇排序每遍歷一次都記住了當前最小(大)元素的位置,最後僅需一次交換操作即可將其放到合適的位置。

然後在剩下的元素中再找最小(大)元素與第二個元素的位置交換,依此類推,直到所有元素排序排序完成。根據上述描述,一共進行n-1趟比較後,就能完成整個排隊過程。我們可以知道,第k趟比較需要進行的陣列元素的兩兩比較的次數為n-k次,所以共需要的比較次數為n*(n-1) / 2,因此選擇排序演算法的時間複雜度與氣泡排序一樣,也為o(n^2)。

演算法簡介:

1.初始狀態:序列為無序狀態。

2.第1次排序:從n個元素中找出最小(大)元素與第1個記錄交換

3.第2次排序:從n-1個元素中找出最小(大)元素與第2個記錄交換

4.第i次排序:從n-i+1個元素中找出最小(大)元素與第i個記錄交換

5.以此類推直到排序完成

*/public

class

selectsort

}int temp=arr[i]

; arr[i]

=arr[min]

; arr[min]

=temp;}}

public

static

void

main

(string[

] args)

;sort

(arr)

;for

(int i=

0;i<

10;i++)}

}

第三種:插入排序

/*

* 對於n個元素,一共需要進行n-1輪比較,

* 而第k輪比較需要進行k次數組元素的兩兩比較,

* 因此共需要進行的比較次數為:1 + 2 + ... + (n-1)

* 所以插入排序的時間複雜度同氣泡排序一樣,也為o(n^2)。

* 演算法簡介:

1.從第乙個元素開始,該元素可認為已排序。

2.取出下乙個元素,在排序好的元素序列中從後往前掃瞄

3.如果元素(已排序)大於新元素,將該元素移到下一位置

4.重複3.直到找到已排序的元素小於或等於新元素的位置

5.將新元素插入該位置後

6.重複2-5直到排序完成

*/public

class

insertsort

else}}

}public

static

void

main

(string[

] args)

;sort

(arr)

;for

(int i=

0;i<

10;i++)}

}

第四種:快速排序(最經典)

/*

* 介紹: 快速排序通常明顯比同為o(nlogn)的其他演算法更快,因此常被採用,而且快 排採用了分治法的思想,所以在很多筆試面試中能經常看到快排的影子。可 見掌握快排的重要性。

快速排序(quick sort)由圖靈獎獲得者tony hoare發明,被列為20世紀十 大演算法之一,是迄今為止所有內排序演算法中速度最快的一種。氣泡排序的公升 級版,交換排序的一種。快復速排序的時間雜度為o(nlog(n))。

排序思想:

1. 從數列中挑出乙個元素,稱為"基準"(pivot),

2. 重新排序數列,所有元素比基準值小的擺放在基準前面,

所有元素比基準 值大的擺在基準的後面(相同的數可以到任一邊)。

在這個分割槽結束之後, 該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。

3. 遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數 列排序。

4. 遞迴的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好 了。

雖然一直遞迴下去,但是這個演算法總會結束,因為在每次的迭代 (iteration)中,

它至少會把乙個元素擺到它最後的位置去。

*/public

class

quicksort

public

static

void

sort

(int

arr,

int left,

int right)

int base=arr[left]

;int l=left;

int r=right;

while

(l != r)

while

(arr[l]

<=base && l

if(l

} arr[left]

= arr[l]

; arr[l]

= base;

sort

(arr,left,l-1)

;sort

(arr,r+

1,right);}

public

static

void

quicksort

(int

arr)

sort

(arr,

0,arr.length-1)

;}public

static

void

main

(string[

] args)

;quicksort

(arr)

;for

(int i=

0;i<

10;i++)}

}

排序演算法效能分析

2.從演算法簡單性看:由於直接選擇排序、直接插入排序和氣泡排序的演算法比較 簡單,將其認為是簡單演算法。對於shell排序、堆排序、快速排序和歸併排序 演算法,其演算法比較複雜,認為是複雜排序。

3.從穩定性看:直接插入排序、氣泡排序和歸併排序時穩定的;而直接選擇排序、快速排序、 shell排序和堆排序是不穩定排序

4.從待排序的記錄數n的大小看,n較小時,宜採用簡單排序;而n較大時宜採 用改進排序。

冒泡 快速 插入 選擇四種排序演算法實現

一 氣泡排序 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。param nums...

php四種基本排序演算法(冒泡,選擇,插入,快速)

四種演算法,分別用氣泡排序法,快速排序法,選擇排序法,插入排序法將下面陣列中的值按照從小到大的順序進行排序。arr 1,43,54,62,21,66,32,78,36,76,39 1.氣泡排序 思路分析 在要排序的一組數中,對當前還未排好的序列,從前往後對相鄰的兩個數依次進行比較和調整,讓較大的數往...

php四種基礎演算法 冒泡,選擇,插入和快速排序法

1.氣泡排序法 思路分析 法如其名,就是像冒泡一樣,每次從陣列當中 冒乙個最大的數出來。比如 2,4,1 第一次 冒出的泡是4 2,1,4 第二次 冒出的泡是 2 1,2,4 最後就變成這樣 實現 arr array 1,43,54,62,21,66,32,78,36,76,39 function ...