今天總結一下經常遇到的四種演算法
第一種:氣泡排序
/*
* 排序思想:
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 ...