冒泡排序的原理及java代碼實現(xiàn)
概述
冒泡排序是一種簡單的排序算法。它重復地走訪要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復地進行直到數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的開始。
簡單點說,就是:
冒泡排序是將比較大的數(shù)字沉在數(shù)組的后面(可以理解為下面),較小的浮在前面(上面)。
直觀釋義圖:
步驟
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數(shù)。
針對所有的元素重復以上的步驟,除了最后一個。
持續(xù)每次對越來越少的元素重復上面的步驟,直到?jīng)]有任何一對數(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 6 6 下沉到最后,兩個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
四輪結束
2 2 3 5 6
代碼實現(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 個元素,比較輪數(shù)為 length-1 次(不需和自己比)
for (int i = 0; i < array.length - 1; i++) {
System.out.println("第" + (i + 1) + "輪開始");
// 第二層循環(huán),每相鄰的兩個比較一次,次數(shù)隨著輪數(shù)的增加不斷減少,每輪確定一個最大的,不需比較那個最大的
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("結果:");
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("最終結果");
for (int i : sorted) {
System.out.print(i + " ");
}
}
}
測試輸出結果:
第1輪開始 第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 結果: 3 2 5 2 6 第2輪開始 第2輪,第1次比較: 2 3 5 2 6 第2輪,第2次比較: 2 3 5 2 6 第2輪,第3次比較: 2 3 2 5 6 結果: 2 3 2 5 6 第3輪開始 第3輪,第1次比較: 2 3 2 5 6 第3輪,第2次比較: 2 2 3 5 6 結果: 2 2 3 5 6 第4輪開始 第4輪,第1次比較: 2 2 3 5 6 結果: 2 2 3 5 6 最終結果 2 2 3 5 6
經(jīng)測試,與實例中結果一致。
相關文章
java Quartz定時器任務與Spring task定時的幾種實現(xiàn)方法
本篇文章主要介紹了java Quartz定時器任務與Spring task定時的幾種實現(xiàn)方法的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-02-02
詳解SpringCloud-Alibaba-Seata分布式事務
這篇文章主要介紹了SpringCloud-Alibaba-Seata分布式事務的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
Java的四種常見線程池及Scheduled定時線程池實現(xiàn)詳解
這篇文章主要介紹了Java的四種常見線程池及Scheduled定時線程池實現(xiàn)詳解,在Java中,我們可以通過Executors類來創(chuàng)建ScheduledThreadPool,Executors類提供了幾個靜態(tài)方法來創(chuàng)建不同類型的線程池,包括ScheduledThreadPool,需要的朋友可以參考下2023-09-09
java使用Stream流對自定義對象數(shù)組去重的實現(xiàn)
本文主要介紹了java使用Stream流對自定義對象數(shù)組去重的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-04-04

