最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

手把手教你搞懂冒泡排序和選擇排序

 更新時(shí)間:2021年07月15日 16:24:31   作者:小胖java攻城獅  
這篇文章主要介紹了java數(shù)組算法例題代碼詳解(冒泡排序,選擇排序),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

冒泡排序

原理:

從頭(左邊)開(kāi)始比較每一對(duì)相鄰的元素,如果第1個(gè)比第2個(gè)大,就交換它們的位置,執(zhí)行完一輪后,最末尾(最右邊)就是最大的元素。

舉例:

假設(shè)存在數(shù)組nums={6,8,2,9,4},對(duì)nums數(shù)組進(jìn)行排序

在這里插入圖片描述

從左往右開(kāi)始,拿出兩個(gè)元素進(jìn)行對(duì)比,出現(xiàn)兩種情況:

1.左邊元素 <= 右邊元素,不變

2.左邊元素 > 右邊元素,交換他們的位置(這里可以寫(xiě)成>=嗎?不行,因?yàn)闀?huì)造成排序不穩(wěn)定)

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

接下來(lái)就是新的一輪排序,邏輯跟上圖的流程是一樣的,不同的是會(huì)將最大的元素排除在外,不用進(jìn)行比較。

手撕代碼:

/*
沒(méi)有使用過(guò)優(yōu)化策略的冒泡排序
 */
public class BubbleSort1 {
    //測(cè)試數(shù)據(jù)
    public static int[] nums = {4,1,7,11,9,55};
    //main方法
    public static void main(String[] args){
        //這個(gè)for循環(huán)每循環(huán)完一次,end--,說(shuō)明就把最大的元素給選出來(lái)了
        for (int end = nums.length - 1; end > 0; end--){
            for (int begin = 1; begin <= end; begin++){
                if(nums[begin] < nums[begin - 1]){    //每當(dāng)發(fā)現(xiàn)左邊的元素大于右邊的元素
                    //交換元素
                    int temp = nums[begin];
                    nums[begin] = nums[begin - 1];
                    nums[begin - 1] = temp;
                }
            }
        }
        //打印驗(yàn)證結(jié)果
        for(int num : nums){
            System.out.print(num+"_");
        }
    }
}

時(shí)間復(fù)雜度為O(n^2),也就是n的平方,不過(guò)這是平均時(shí)間復(fù)雜度

存在最好時(shí)間復(fù)雜度O(n),那就是數(shù)組本來(lái)就有序,也就是說(shuō)只掃描一遍就行了。

優(yōu)化策略:

由于存在部分有序的情況,例如nums數(shù)組為{8,5,2,10,11,12},也就是說(shuō)10,11,12都沒(méi)有比較的必要了

優(yōu)化代碼:

/*
使用過(guò)優(yōu)化策略的冒泡排序
 */
public class BubbleSort1 {
    public static int[] nums = {4,1,7,11,9,55};
    public static void main(String[] args){
        for (int end = nums.length - 1; end > 0; end--){
            int sortIndex = 1;  //記錄最后一次交換位置
            for (int begin = 1; begin <= end; begin++){
                if(nums[begin] < nums[begin - 1]){
                    int temp = nums[begin - 1];
                    nums[begin - 1] = nums[begin];
                    nums[begin] = temp;
                    sortIndex = begin;
                }
                end = sortIndex;
            }
        }
        for(int num : nums){
            System.out.print(num+"_");
        }
    }
}

選擇排序

原理:

從數(shù)組中找到最大的元素,然后與末尾(最右邊)的元素交換位置,執(zhí)行完一輪后,末尾(最右邊)的那個(gè)元素就是最大的元素。

舉例:

假設(shè)存在數(shù)組nums={5,8,1,9,3},對(duì)nums數(shù)組進(jìn)行排序,準(zhǔn)備一個(gè)maxIdex代表當(dāng)前最大元素的下標(biāo)

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

接下來(lái)就是新的一輪排序,邏輯跟上圖的流程是一樣的,不同的是會(huì)將最大的元素排除在外,不用進(jìn)行比較。

手撕代碼:

/**
 * 選擇排序
 */
public class SelectionSort {
    //測(cè)試數(shù)據(jù)
    private static int[] nums = {6,3,2,8,9};
    //main方法
    public static void main(String[] args){
        //這個(gè)for循環(huán)每循環(huán)完一次,end--,說(shuō)明就把最大的元素給選出來(lái)了
        for(int end = nums.length - 1; end > 0; end--){
            int maxIndex = 0;   //假設(shè)下標(biāo)0是數(shù)組中最大元素
            for(int begin = 1; begin <= end; begin++){  //從左往右開(kāi)始比較
                if(nums[maxIndex] < nums[begin]){   //發(fā)現(xiàn)存在一個(gè)元素大于假設(shè)最大元素
                    maxIndex = begin;   //更改最大元素索引
                }
            }
            //最右邊一個(gè)元素和最大值元素交換位置
            int temp = nums[maxIndex];
            nums[maxIndex] = nums[end];
            nums[end] = temp;
        }
        //打印結(jié)果
        for(int num : nums){
            System.out.print(num+"_");
        }
    }
}

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多文章!

相關(guān)文章

  • 基于Java語(yǔ)言在窗體上實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲的完整步驟

    基于Java語(yǔ)言在窗體上實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲的完整步驟

    這篇文章主要給大家介紹了基于Java語(yǔ)言在窗體上實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲的完整步驟,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Java  Object類(lèi)中的常用API介紹

    Java  Object類(lèi)中的常用API介紹

    這篇文章主要介紹了Java  Object類(lèi)中的常用API介紹,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • 詳解使用Spring Boot開(kāi)發(fā)Web項(xiàng)目

    詳解使用Spring Boot開(kāi)發(fā)Web項(xiàng)目

    這篇文章主要介紹了詳解使用Spring Boot開(kāi)發(fā)Web項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • Java 基礎(chǔ)之內(nèi)部類(lèi)詳解及實(shí)例

    Java 基礎(chǔ)之內(nèi)部類(lèi)詳解及實(shí)例

    這篇文章主要介紹了 Java 基礎(chǔ)之內(nèi)部類(lèi)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • JavaMail實(shí)現(xiàn)發(fā)送郵件功能

    JavaMail實(shí)現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了JavaMail實(shí)現(xiàn)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Java十大經(jīng)典排序算法的實(shí)現(xiàn)圖解

    Java十大經(jīng)典排序算法的實(shí)現(xiàn)圖解

    Java常見(jiàn)的排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。本文詳解介紹Java十大十大經(jīng)典排序算法的實(shí)現(xiàn)以及圖解,需要的可以參考一下
    2022-03-03
  • 詳解Java 中的三種代理模式

    詳解Java 中的三種代理模式

    代理(Proxy)是一種設(shè)計(jì)模式,提供了對(duì)目標(biāo)對(duì)象另外的訪(fǎng)問(wèn)方式;這篇文章主要介紹了Java 中的三種代理模式,需要的朋友可以參考下
    2018-08-08
  • SpringBoot使用EmbeddedDatabaseBuilder進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試

    SpringBoot使用EmbeddedDatabaseBuilder進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試

    在開(kāi)發(fā)SpringBoot應(yīng)用程序時(shí),我們通常需要與數(shù)據(jù)庫(kù)進(jìn)行交互,為了確保我們的應(yīng)用程序在生產(chǎn)環(huán)境中可以正常工作,我們需要進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試,在本文中,我們將介紹如何使用 SpringBoot 中的 EmbeddedDatabaseBuilder 來(lái)進(jìn)行數(shù)據(jù)庫(kù)集成測(cè)試
    2023-07-07
  • Java postgresql數(shù)組字段類(lèi)型處理方法詳解

    Java postgresql數(shù)組字段類(lèi)型處理方法詳解

    這篇文章主要介紹了Java postgresql數(shù)組字段類(lèi)型處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • JAVA對(duì)稱(chēng)加密算法PBE定義與用法實(shí)例分析

    JAVA對(duì)稱(chēng)加密算法PBE定義與用法實(shí)例分析

    這篇文章主要介紹了JAVA對(duì)稱(chēng)加密算法PBE定義與用法,結(jié)合實(shí)例形式分析了JAVA對(duì)稱(chēng)加密算法PBE的概念、原理、定義及使用方法,需要的朋友可以參考下
    2019-09-09

最新評(píng)論

行唐县| 竹溪县| 秦安县| 富宁县| 罗城| 揭东县| 佛坪县| 昌吉市| 广平县| 阿克苏市| 雅江县| 广汉市| 讷河市| 巴马| 凤山县| 宁阳县| 麻城市| 苍南县| 霍山县| 勃利县| 洱源县| 上饶市| 拜泉县| 屏山县| 阜南县| 苍溪县| 深水埗区| 广安市| 乐都县| 宁津县| 玛多县| 铁岭市| 旌德县| 喀喇| 兴和县| 辽中县| 太仓市| 全南县| 阿图什市| 河南省| 肇庆市|