一、排序的概念
排序的概念
排序:所謂排序,就是使一串記錄,按照其中的某個或某些關(guān)鍵字的大小,遞增或遞減的排列起來的操作。
排序的穩(wěn)定性
上述待排序的數(shù)中,有兩個5。 將前面
的5標(biāo)記一個a, 將后面
的5標(biāo)記一個b。通過算法進行排序后,這一組數(shù)就有序了, 但是要看兩個相同的5的位置是否有改變。
5a仍在5b前面,那么這個排序算法就是穩(wěn)定的 ,
5a跑到了5b后面,那么這個排序算法就是不穩(wěn)定的 。
一個穩(wěn)定的排序算法可以做到不穩(wěn)定,
不穩(wěn)定的排序算法一定做不到穩(wěn)定。至于為什么要討論這個穩(wěn)定性, 是為了以后應(yīng)用到實際場景上。 比如,一場數(shù)學(xué)考試, 假設(shè)a用了30分鐘做完了,并得了滿分。
假設(shè)b用了一個小時做完了,并得了滿分。 此時a與b都是得了滿分,但是用的時間不一樣,所以兩個人的排名又會有所不同。
七大排序算法
二、冒泡排序
核心思想
基本思想:冒泡排序(Heapsort)是每次都找到未排序數(shù)中的最大數(shù)(最小數(shù))放到末尾下標(biāo),重復(fù)這個過程,從而達到有序。
圖解
有一組待排序數(shù)列,我們進行升序排序。
重復(fù)上述過程即可達到排序的目的。
代碼實現(xiàn)
代碼實現(xiàn)
public class BubbleSort {
/**
* 冒泡排序
* 時間復(fù)雜度:(不考慮優(yōu)化的情況下)O(n^2)
* 空間復(fù)雜度:O(1)
* 穩(wěn)定性:穩(wěn)定
* @param array
*/
public static void bubbleSort(int[] array) {
// 尋找n-1次未排序數(shù)中最大的數(shù)
for (int i = 0; i < array.length - 1; i++) {
// 末尾不參與排序
for (int j = 0; j < array.length - i - 1; j++) {
// 將最大的數(shù)不斷向后移動
if(array[j] > array[j + 1]) {
int tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
}
}
三、性能分析
冒泡排序的特性總結(jié):
冒泡排序是一種非常容易理解的排序
時間復(fù)雜度:O(N^2)
空間復(fù)雜度:O(1)
穩(wěn)定性:穩(wěn)定
四、七大排序算法
文章來源:http://www.zghlxwxcb.cn/news/detail-560285.html
想學(xué)哪個點哪個
歸并排序講解
快速排序講解
直接插入排序講解
希爾排序講解
直接選擇排序講解
堆排序講解
冒泡排序講解文章來源地址http://www.zghlxwxcb.cn/news/detail-560285.html
到了這里,關(guān)于七大排序算法——冒泡排序,通俗易懂的思路講解與圖解(完整Java代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!