Java基礎(chǔ)(冒泡排序與選擇排序)

冒泡排序

冒泡排序算法運行起來非常慢,但在概念上它是排序算法中最簡單的,因此冒泡排序算法在剛開始研究排序技術(shù)時是一個非常好的算法。
冒泡排序原理即:從數(shù)組下標(biāo)為0的位置開始,比較下標(biāo)位置為0和1的數(shù)據(jù),如果0號位置的大,則交換位置,如果1號位置大,則什么也不做,然后右移一個位置,比較1號和2號的數(shù)據(jù),和剛才的一樣,如果1號的大,則交換位置,以此類推直至最后一個位置結(jié)束,到此數(shù)組中最大的元素就被排到了最后,之后再根據(jù)之前的步驟開始排前面的數(shù)據(jù),直至全部數(shù)據(jù)都排序完成。

冒泡排序代碼

package com.java.demo;

import java.util.Random;


/*
 * 數(shù)組排序冒泡排序:
 */
public class ArrayTest1 {

    public static void main(String[] args) {
        //創(chuàng)建一個數(shù)組
        int[] arr = new int[5];
        //創(chuàng)建隨機(jī)數(shù)對象
        Random rd = new Random();
        
        for (int i = 0; i < arr.length; i++) {
            //獲取1-10的隨機(jī)數(shù)
            int num = rd.nextInt(10)+1;
            //對數(shù)組進(jìn)行賦值
            arr[i] = num;
        }
        System.out.println("數(shù)組排序前:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        //對數(shù)組進(jìn)行排序,冒泡排序
        
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length-1-i; j++) {
                //進(jìn)行判斷,如果前面的大于后面是不是進(jìn)行互換,這里要用到中間變量
                if (arr[j]>arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println();
        System.out.println("數(shù)組排序后:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}

冒泡排序原理圖

冒泡排序原理圖

選擇排序

選擇排序原理即:在選擇排序中,不再只比較兩個相鄰的數(shù)據(jù)。因此需要記錄下某一個數(shù)據(jù)的下標(biāo),進(jìn)行選擇排序就是把所有的數(shù)據(jù)掃描一遍,從中挑出(按從小到大排序)最小的一個數(shù)據(jù),這個最小的數(shù)據(jù)和最左端下標(biāo)為0的數(shù)據(jù)交換位置。之后再次掃描數(shù)據(jù),從下標(biāo)為1開始,還是挑出最小的然后和1號位置進(jìn)行交換,這個過程一直持續(xù)到所有的數(shù)據(jù)都排定。而程序中需要有一個標(biāo)識變量來標(biāo)識每次挑出最小數(shù)據(jù)的下標(biāo)。

選擇排序代碼

package com.java.demo;

import java.util.Random;

/*
 * 數(shù)組排序選擇排序:
 */
public class ArrayTest2 {

    public static void main(String[] args) {

        // 定義一個數(shù),動態(tài)初始化
        int[] arr = new int[5];
        // 創(chuàng)建生成隨機(jī)數(shù)的對象
        Random rd = new Random();

        // 對數(shù)組進(jìn)行賦值
        for (int i = 0; i < arr.length; i++) {
            // 獲取1-100的隨機(jī)數(shù)
            int num = rd.nextInt(100) + 1;
            arr[i] = num;
        }

        // 打印
        System.out.println("數(shù)組未排序前:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

        // 對數(shù)組進(jìn)行排序,選擇排序
        for (int i = 0; i < arr.length; i++) {

            for (int j = i + 1; j < arr.length; j++) {
                // 判斷
                if (arr[i] > arr[j]) {
                    // 進(jìn)行互換
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        System.out.println();

        // 打印
        System.out.println("數(shù)組排序后:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

    }
}

選擇排序原理圖

選擇排序原理圖

冒泡排序和選擇排序效率

一般來說選擇排序效率比較高,因為只要交換一次,但是冒泡也可以只記錄坐標(biāo)然后做一次性變換,只是犧牲空間復(fù)雜度。但是冒泡有個很大的優(yōu)點就是它可以檢測整個數(shù)組是否已經(jīng)有序,當(dāng)某次遍歷沒有發(fā)生任何交換的時候你就可以提前終止了。也算是個小優(yōu)化吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)據(jù)結(jié)構(gòu)與算法--排序之冒泡、選擇、插入、希爾 我們關(guān)注的主要對象是重新排列數(shù)組元素的算法,每個元素都有一個主鍵,...
    sunhaiyu閱讀 1,222評論 2 12
  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的...
    Luc_閱讀 2,371評論 0 35
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,822評論 0 15
  • 小時候我們渴望長大,后來發(fā)現(xiàn)長大很可怕,我們以為自己幼稚的無法面對這個世界,事實是這個幼稚的世界等著我們?nèi)ジ淖?/div>
    6a46ab1a9a76閱讀 131評論 0 0
  • APICloud 移動應(yīng)用開發(fā)平臺提供中國領(lǐng)先的“云端一體”的移動應(yīng)用云服務(wù),能夠大幅降低移動APP開發(fā)和管理的難...
    guhongyan閱讀 241評論 0 0

友情鏈接更多精彩內(nèi)容