一.如何衡量乙個排序演算法的優劣
1.演算法的執行效率
2.演算法的內耗消耗:通過空間複雜度來衡量 (原地排序:特指空間複雜度為o(1)的排序演算法)
3.排序演算法的穩定性
若待排序的集合中存在值相等的元素,經過排序之後,相等元素之間原有的順序是否改變,若未改變,則此稱穩定性排序
(需求:如何按照金額排序後的資料,時間也是有序的?相同金額的訂單按照時間順序排序。
解決:先按照時間順序排序一次,再按照金額進行穩定性的排序。)
二.排序分類
1.內部排序:排序過程無需借助外部儲存器(如磁碟),所有排序操作均在記憶體中完成。預設說的排序都是內部排序
2.外部排序:若參與排序的元素過多,資料量過大,記憶體放不下,需要借助外部儲存器來進行排序,
如桶排序。
無論是內部排序還是外部排序,最終資料的排序一定在記憶體中進行。
三.交換排序之一----氣泡排序
氣泡排序只會操作相鄰的兩個元素。每次對相鄰的兩個元素做大小比較,看是否滿足大小關係。
一次冒泡至少會讓乙個元素移動到最終位置(冒泡)
輸入:4,5,6,1,2,3 (要求按照公升序排序)
輸出:1,2,3,4,5,6
演算法的執行效率
最好情況:資料集本身就是乙個有序集合,o(n)
最壞情況:資料集完全逆序,o(n^2)
平均情況:o(n^2)
演算法的記憶體消耗:o(1),無需開闢新的空間,僅僅是原有資料做交換。
氣泡排序是乙個原地排序演算法。
演算法的穩定性
氣泡排序由於相鄰元素發生大小關係變換才會交換次序,所以當兩個元素大小相等時,
並不會改變其相對順序。
氣泡排序的優化
package data.sort;
public
class
bubblesort
;bubblesort
(arr)
;arrprint
(arr);}
public
static
void
bubblesort
(int data)
for(
int i=
0;iif(
!flag)}}
public
static
void
arrprint
(int data)
}}
排序演算法 一 氣泡排序
排序的演算法有很多,例如直接插入排序,希爾排序,氣泡排序,選擇排序,快速排序,堆排序等等。最簡單基礎就是氣泡排序了,關於排序hi有乙個系列。今天是第一篇,主要講氣泡排序演算法思想以及從各個方面對它進行優化。氣泡排序 原理舉例 設陣列長度為n。1 比較相鄰的前後二個資料,如果前面資料大於後面的資料,就...
排序演算法(一) 氣泡排序
排序思路 樣例 1.從首位元素開始,前後元素相比較,保證 小在前 大在後 逐個元素向後遞推。一遍結束後,最大元素將位於排序末位。16 35 9 35 5 35 20 35 結果 2.因為最大元素已經排位完畢,所以不考慮末位最大元素,從頭開始,再做一輪排序。排序範圍 結果 可以看出,第二大元素已經排至...
排序演算法(一)氣泡排序
氣泡排序 bubble sort,台灣譯為 泡沫排序或氣泡排序 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。以將陣列 number n 中的n個數從小到大排序為例 ...