排序演算法之冒泡排序(Java)

來源:互聯網
上載者:User

標籤:



冒泡排序即每次遍曆。相鄰數字間進行比較,前者大於後者進行交換,不斷將最大值後移,直至沉至最後位置;演算法關鍵要點在於確定每次迴圈的邊界;

後面兩種演算法則是對冒泡排序一定程度上的改良,但相對於其他排序演算法,冒泡排序效能依然較差。

//冒泡排序public class Bubble_Sort {//最原始的解法public void bubble_sort1(int[] data){int n = data.length;for(int i = 0; i < n; i++){//注意迴圈的index範圍,避免溢出for(int j = 0; j < n - i - 1; j++){if(data[j] > data[j + 1]){swap(data, j , j + 1);}}}}//改進演算法,通過引入一個標誌量flag,判斷一次迴圈是否有移動,若無移動,則表示//排序已經完成,無需在進行下一次繼續迴圈public void bubble_sort2(int[] data){int n = data.length;boolean flag = true;//標示是否進行了移動int index = n - 1; //標示需要迴圈的最後一位的index        //一旦在移動,則繼續迴圈while(flag){flag = false;for(int j = 0; j < index - 1; j++){if(data[j] > data[j + 1]){swap(data, j , j + 1);flag = true;}}index--;}}//改進演算法二:當一次遍曆中,最後m位都未進行轉換,則表示後面n位都比當前這個最大數要大//根據冒泡排序知,每次沉入最大值,則後面這些位一定已經排好序public void bubble_sort3(int[] data){int n = data.length;int index = n - 1;while(index != 0){int k = 0;for(int j = 0; j < index - 1; j++){if(data[j] > data[j + 1]){swap(data, j , j + 1);k = j;}}index = k;}}//無法像C++一樣使用引用實現,故只好使用data數組進行改變private void swap(int[] data , int a, int b){int temp = data[a];data[a] = data[b];data[b] = temp;}public void print_array(int[] data){for(int num : data){System.out.print(num);System.out.print(" ");}}public static void main(String[] args) {Bubble_Sort bubble_Sort = new Bubble_Sort();int data[] = {2,34,45,2,13,24,5,24,57};bubble_Sort.bubble_sort3(data);bubble_Sort.print_array(data);}}

排序演算法之冒泡排序(Java)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.