1. 程式人生 > >java演算法-氣泡排序

java演算法-氣泡排序

氣泡排序的特點:

>相鄰位置比較,如果約定從大到小排序,每一輪比較完成,可以排好一個小的,如果從小到大,每一輪比較完成,可以在末尾排好一個大的

我們用隨機陣列進行比較,把每輪的結果打印出來,就知道,氣泡排序的規律了:

package com.ghostwu;
import java.util.Random;

class MyBubbleSort {
    private int[] arr;
    public MyBubbleSort(){
        arr = new int[10];
        Random rand = new Random();
        
for( int i = 0; i < arr.length; i++ ){ arr[i] = rand.nextInt( 101 ); } } public void sort(){ for( int i = 0; i < arr.length; i++ ){ for( int j = 0; j < ( arr.length - i - 1 ); j++ ){ if( arr[j] > arr[j+1] ) {
int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } display( "第" + ( i + 1 ) + "輪的比較結果: " ); } } public void display( String info ){ System.out.println( info ); for( int i = 0; i < arr.length; i++ ){ System.out.print( arr[i]
+ "\t" ); } System.out.println(); } } public class BubbleSort{ public static void main( String[] args ){ MyBubbleSort bs = new MyBubbleSort(); bs.display( "排序之前:" ); bs.sort(); bs.display( "排序之後:" ); } }

執行結果:

[email protected]:~/java/data_struct/sort$ !javac
javac -d . BubbleSort.java 
[email protected]:~/java/data_struct/sort$ java com.ghostwu.BubbleSort 
排序之前:
27    93    9    25    6    98    39    84    56    19    
第1輪的比較結果: 
27    9    25    6    93    39    84    56    19    98    
第2輪的比較結果: 
9    25    6    27    39    84    56    19    93    98    
第3輪的比較結果: 
9    6    25    27    39    56    19    84    93    98    
第4輪的比較結果: 
6    9    25    27    39    19    56    84    93    98    
第5輪的比較結果: 
6    9    25    27    19    39    56    84    93    98    
第6輪的比較結果: 
6    9    25    19    27    39    56    84    93    98    
第7輪的比較結果: 
6    9    19    25    27    39    56    84    93    98    
第8輪的比較結果: 
6    9    19    25    27    39    56    84    93    98    
第9輪的比較結果: 
6    9    19    25    27    39    56    84    93    98    
第10輪的比較結果: 
6    9    19    25    27    39    56    84    93    98    
排序之後:
6    9    19    25    27    39    56    84    93    98

從上面的結果,可以看出,第7輪已經排好序了。後面的3輪完全沒有必要,浪費CPU的計算時間,所以,我們可以完善一下上面的程式,用一個變數來標記,是否已經排好序了。

改進後的程式:

package com.ghostwu;
import java.util.Random;

class MyBubbleSort {
    private int[] arr;
    public MyBubbleSort(){
        arr = new int[10];
        Random rand = new Random();
        for( int i = 0; i < arr.length; i++ ){
            arr[i] = rand.nextInt( 101 );
        }
    }
    public void sort(){
        boolean flag = true;
        for( int i = 0; i < arr.length; i++ ){
            flag = true;
            for( int j = 0; j < ( arr.length - i - 1 ); j++ ){
                if( arr[j] > arr[j+1] ) {
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                    flag = false;
                }
            }
            if( flag ) break;
            display( "第" + ( i + 1 ) + "輪的比較結果: " );
        }
    }
    public void display( String info ){
        System.out.println( info );
        for( int i = 0; i < arr.length; i++ ){
            System.out.print( arr[i] + "\t" );
        }
        System.out.println();
    }
}

public class BubbleSort{
    public static void main( String[] args ){

        MyBubbleSort bs = new MyBubbleSort();
        bs.display( "排序之前:" );
        bs.sort();
        bs.display( "排序之後:" );
    }
}

執行結果:

[email protected]:~/java/data_struct/sort$ java com.ghostwu.BubbleSort 
排序之前:
9    71    79    0    31    11    75    65    68    36    
第1輪的比較結果: 
9    71    0    31    11    75    65    68    36    79    
第2輪的比較結果: 
9    0    31    11    71    65    68    36    75    79    
第3輪的比較結果: 
0    9    11    31    65    68    36    71    75    79    
第4輪的比較結果: 
0    9    11    31    65    36    68    71    75    79    
第5輪的比較結果: 
0    9    11    31    36    65    68    71    75    79    
排序之後:
0    9    11    31    36    65    68    71    75    79    

相關推薦

**java演算法 氣泡排序 選擇排序 折半查詢**

//氣泡排序 ``` int[] arr = {2,3,5,6,4,7,8,2,5,6}; for(int i = 0; i < arr.length-1; i++){       for(int j = i + 1; j < arr.length; j++){

java演算法-氣泡排序

氣泡排序的特點: >相鄰位置比較,如果約定從大到小排序,每一輪比較完成,可以排好一個小的,如果從小到大,每一輪比較完成,可以在末尾排好一個大的 我們用隨機陣列進行比較,把每輪的結果打印出來,就知道,氣泡排序的規律了: package com.ghostwu; import java.util

java排序演算法氣泡排序

快速排序 氣泡排序的思想方法: 1.從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)的資料元素交換到了無序佇列的隊尾,從而成為有序序列的一部分; 2.下一次繼續這個過程,直到所有資料元素都排好序。演算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裡最大(小

java版資料結構與演算法氣泡排序

/** * 氣泡排序規則: * 1.比較兩個相鄰物件 * 2.如果左邊的大於右邊的,則調換位置 * 3.向右移動一個位置,比較接下來的兩個物件 * 時間複雜度:O(log n^2) */ class ArrayBubble { public static void bub

Java經典演算法氣泡排序

氣泡排序、 實現原理: 比較兩個相鄰位數的元素,將較大的元素交換到右端或左端,最大的元素就在最右端或是最左端;     從小-->大   1 public class MaoPao { 2 3 public static void

[排序演算法]--氣泡排序的三種實現(Java)

氣泡排序是非常好理解的,以從小到大排序為例,每一輪排序就找出未排序序列中最大值放在最後。 設陣列的長度為N: (1)比較前後相鄰的二個數據,如果前面資料大於後面的資料,就將這二個數據交換。 (2)這樣對陣列的第0個數據到N-1個數據進行一次遍歷後,最大的一個數據

java中的排序演算法——氣泡排序

氣泡排序 工作原理: 重複的訪問要排序的序列,一次比較兩個元素,如果他們的順序錯誤就把它們交換過來,重 復進行訪問,直到排序完成,越小的元素會經過不停的交換慢慢浮到序列的最上層。 即每輪迴圈把最大的數放在最後,與選擇排序的區別,無需記錄最大數的位置,一邊比較一邊

java 排序演算法 氣泡排序

一般的氣泡排序會有重複的比較,所以需要對氣泡排序進行優化,優化後的氣泡排序 package shujujiegou; import java.util.Arrays; /** * 氣泡排序的優化演算法 * @author TomCat * */ pu

排序演算法----氣泡排序java

import java.util.Arrays; import java.util.Scanner; /** * Created by Admin on 2017/3/26. */ public class test02 { public static void BubbleSort(int[] n)

Java排序演算法-氣泡排序以及優化

繼上一篇博:  氣泡排序:如何理解:  兩個數比較大小,較大的數下沉,較小的數冒起來。 過程:比較相鄰的兩個資料,如果第二個數小,就交換位置。從後向前兩兩比較,一直到比較最前兩個資料。最終最小數被交換到起始的位置,這樣第一個最小數的位置就排好了。繼續重複上述過程,依次將第2.

結合舞蹈更易理解的演算法--氣泡排序演算法[java程式碼]

舞蹈地址:http://t.cn/hrf58M 氣泡排序演算法java程式碼: /** * 氣泡排序 * @author hsy * */ public class BubbleSort { private long[] a; private in

JAVA 複習氣泡排序 , 遞迴演算法

使用氣泡排序,首先我們要知道,外層n-1,內層n-i-1,外層是表示迴圈的次數,內層表示迴圈比較,比較的方式是用賦值的方式進行比較的,用我們比較通俗的話來說,兩兩相比,大者後移。氣泡排序和遞迴是基本演算

演算法-Java-0001-氣泡排序

簡介 我們通常所說的排序演算法往往指的是內部排序演算法,即資料記錄在記憶體中進行排序。   排序演算法大體可分為兩種: 比較排序,時間複雜度O(nlogn) ~ O(n^2),主要有:氣泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序等。 非比較排

演算法 -- Java實現氣泡排序(圖解 + 程式碼實現)

排序思想: 相鄰元素兩兩比較,大的往後放,第一次完畢,最大值出現在了最大索引處(每比較完一趟,就選出一個最大值放到了後面),同理繼續可以得到一個排好序的陣列 排序圖解: 排序規

演算法 ----氣泡排序

將一組數字從大到小排列   function sort(arr) { function sort(arr) { //第一層for迴圈控制趟數 for (var i = 0; i < arr.length - 1; i++)

排序演算法--氣泡排序(bubble sort)

氣泡排序是一個簡單的排序演算法,演算法複雜度n的平方,特點是兩兩比較,每次遍歷會將最大值或最小值放在最後,像冒泡一樣,每次的最大值或最小值,逐漸冒出,故名氣泡排序; 程式碼如下 void swap( int& a,int& b) {//資料交換的函式,這裡另類了一點,沒有

經典排序演算法 - 氣泡排序Bubble Sort

最近學習了一下排序演算法,寫篇文章記錄一下,詳細講解網上有很多,可以自己去查 氣泡排序Bubble Sort 氣泡排序是通過兩兩比較,最大的往後移,重複這一過程直到資料不再交換,則排序完成。氣泡排序的時間複雜度是O(n²),是穩定排序。 演算法描述(Java):

java氣泡排序、選擇排序、快速排序、插入排序、java8排序

package cn.com.javatest.sort; import org.apache.commons.lang3.StringUtils; /** * 常用排序方法 * * @author: Rodge * @time: 2018年10月4日 下午5:16:22 * @ve

Python 演算法 - 氣泡排序

# coding=utf-8 # 氣泡排序 def bubble_sort(lists): """ 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。 走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。

排序演算法氣泡排序(關鍵詞:資料結構/演算法/排序演算法/氣泡排序

假定:有 1 個亂序的數列 nums ,其中有 n 個數。 要求:排好序之後是 從小到大 的順序。 氣泡排序演算法 程式碼 from swap import swap def bubble_sort(nums): n = len(nums) for i in rang