- 相關(guān)推薦
冒泡排序的原理以及java代碼實(shí)現(xiàn)
冒泡排序的原理以及java代碼實(shí)現(xiàn)
概述
冒泡排序是一種簡(jiǎn)單的排序算法。
它重復(fù)地走訪要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來(lái)是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的開(kāi)始。
簡(jiǎn)單點(diǎn)說(shuō),就是:
冒泡排序是將比較大的數(shù)字沉在數(shù)組的后面(可以理解為下面),較小的浮在前面(上面)。
直觀釋義圖:
步驟
比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。
針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的'步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。
實(shí)例
原始數(shù)據(jù):
3 5 2 6 2
第一輪
比較 3 和 5,5 大于 3 ,不需交換3 5 2 6 2繼續(xù)比較 5 和 2,5 大于 2,交換位置3 2 5 6 2繼續(xù)比較 5 和 6,6 大于 5,不需交換3 2 5 6 2繼續(xù)比較 6 和 2,6 大于 2,交換位置3 2 5 2 66 下沉到最后,兩個(gè)2都分別向上(前)冒出。
第二輪
比較 3 和 2, 3 大于 2,交換位置2 3 5 2 6比較 3 和 5, 5 大于 3,不需交換2 3 5 2 6比較 5 和 2, 5 大于 2,交換位置2 3 2 5 6不需比較 5 和 6
第三輪
比較 2 和 3, 3 大于 2,不需交換2 3 2 5 6比較 3 和 2, 3 大于 2,交換位置2 2 3 5 6不需比較了
第四輪
比較 2 和 2,不需交換2 2 3 5 6
四輪結(jié)束
2 2 3 5 6
代碼實(shí)現(xiàn)(Java)
package com.coder4j.main.arithmetic.sorting;public class Bubble { /** * 冒泡排序 * * @param array * @return */ public static int[] sort(int[] array) { int temp; // 第一層循環(huán)表明比較的輪數(shù), 比如 length 個(gè)元素,比較輪數(shù)為 length-1 次(不需和自己比) for (int i = 0; i < array.length - 1; i++) { System.out.println("第" + (i + 1) + "輪開(kāi)始"); // 第二層循環(huán),每相鄰的兩個(gè)比較一次,次數(shù)隨著輪數(shù)的增加不斷減少,每輪確定一個(gè)最大的,不需比較那個(gè)最大的 for (int j = 0; j < array.length - 1 - i; j++) { if (array[j + 1] < array[j]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } System.out.println("第" + (i + 1) + "輪,第" + (j + 1) + "次比較:"); for (int k : array) { System.out.print(k + " "); } System.out.println(); } System.out.println("結(jié)果:"); for (int k : array) { System.out.print(k + " "); } System.out.println(); } return array; } public static void main(String[] args) { int[] array = { 3, 5, 2, 6, 2 }; int[] sorted = sort(array); System.out.println("最終結(jié)果"); for (int i : sorted) { System.out.print(i + " "); } }}
測(cè)試輸出結(jié)果:
第1輪開(kāi)始第1輪,第1次比較:3 5 2 6 2 第1輪,第2次比較:3 2 5 6 2 第1輪,第3次比較:3 2 5 6 2 第1輪,第4次比較:3 2 5 2 6 結(jié)果:3 2 5 2 6 第2輪開(kāi)始第2輪,第1次比較:2 3 5 2 6 第2輪,第2次比較:2 3 5 2 6 第2輪,第3次比較:2 3 2 5 6 結(jié)果:2 3 2 5 6 第3輪開(kāi)始第3輪,第1次比較:2 3 2 5 6 第3輪,第2次比較:2 2 3 5 6 結(jié)果:2 2 3 5 6 第4輪開(kāi)始第4輪,第1次比較:2 2 3 5 6 結(jié)果:2 2 3 5 6 最終結(jié)果2 2 3 5 6
經(jīng)測(cè)試,與實(shí)例中結(jié)果一致。
【冒泡排序的原理以及java代碼實(shí)現(xiàn)】相關(guān)文章:
教你JAVA語(yǔ)言快速排序的原理10-04
java構(gòu)造函數(shù)實(shí)現(xiàn)代碼示例08-23
Java實(shí)現(xiàn)在不同線程中運(yùn)行的代碼實(shí)例詳解06-11
經(jīng)典c語(yǔ)言冒泡排序法08-08
C語(yǔ)言的冒泡排序方法08-22
關(guān)于循環(huán)的java代碼示例09-26
Java代碼的基本知識(shí)10-09
讓JAVA代碼更高效的技巧10-05
C語(yǔ)言快速排序?qū)嵗a06-04