使用場景
o(n)= n*(n-1)/2 如果n比較小的話它的時間複雜度就會降級
資料量比較小,常見於小遊戲中10個左右資料的排序場景
具體實現
/**
* 氣泡排序演算法
* * 適用於資料量比較小的場景
* * @param array
*/public
static
void
bubblesort
(int
array)}if
(flag)
}}
使用場景
選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。
具體實現
/**
* 選擇排序演算法
* *
* @param array
*/public
static
void
selectsort
(int
array)}if
(index != i)
}}
使用場景
資料量大並且是線性結構,有一點不好就是出現大量重複資料時候容易效能不好
前序遍歷
具體實現
//這個寫起來就有點麻煩了,jdk預設使用就是快速排序演算法,這裡給出同樣功能的實現
/** * 快速排序
* * @param array
* @param begin
* @param end
*/public
static
void
quicksort
(int
array,
int begin,
int end)
} high = low;
}else
} low = high;}}
// 第一次迴圈結束,將左右兩邊分隔開,左邊的全部小於右邊的
array[low]
= x;
// 比較左邊的資料
quicksort
(array, begin, low -1)
;// 比較右邊的資料
quicksort
(array, low +
1, end)
;}
使用場景
後序遍歷,使用空間比較大
具體實現
public
static
void
mergesort
(int array,
int left,
int right)
else
}// 0 4 7
// 1 2 5 9 === 3 4 10 11
public
static
void
merge
(int
array,
int left,
int mid,
int right)
for(
int i = mid; i <= right; i++
)// 合併
int i =0;
int j =0;
int k = left;
while
(i < leftsize && j < rightsize)
else
}while
(i < leftsize)
while
(j < rightsize)
}
資料結構與演算法系列10 排序演算法 歸併 快排
思想 歸併排序的核心思想還是蠻簡單的。如果要排序乙個陣列,我們先把陣列從中間分成前後兩部分,然後對前後兩部分分別排序,再將排好序的兩部分合併在一起,這樣整個陣列就都有序了。歸併排序 def merge sort a n len a merge sort between a,0,n 1 def mer...
資料結構3 排序演算法
氣泡排序 演算法描述 排序問題是基本演算法,主要有冒泡演算法 插入排序以及選擇排序演算法。冒泡演算法是對整個列進行多次遍歷迴圈,直至將所有的數都比較一遍,每次迴圈都能產生乙個最大數放置於後面,這樣需要兩層迴圈 外層控制次數,內層控制單次冒泡,內層針對的是相鄰裡兩個進行比較的迴圈。using syst...
資料結構系列 一 排序演算法
1.2 插入排序 1.3 選擇排序 1.4 歸併排序 1.5 堆排序 1.6 快速排序 基於資料狀況的排序演算法 1.7桶排序 1.8 小結 穩定排序 相對次序並沒有改變 void bubblesortv1 int a,int n 實現 增加乙個sorted標誌,對於有序陣列則不再進行比較判斷。複雜...