Jadual Kandungan
冒泡排序法
冒泡排序法的原理
基本原理
原理图解
实现冒泡的步骤分解
使用for循环确定排序次数
核心功能 — 两两比较并根据情况交换位置
冒泡排序法完整代码
冒泡排序法的优化
冒泡排序法的效率
时间复杂度
空间复杂度
算法的稳定性
O是个啥?!
相关文章链接
开开心心每一天
Rumah hujung hadapan web tutorial js 冒泡排序法详解

冒泡排序法详解

Oct 06, 2017 am 10:41 AM
gelembung menyusun Penjelasan terperinci

冒泡排序法

HTML5学堂-码匠:本期继续走入算法 —— 冒泡排序法。冒泡排序算法相对简单,容易上手,稳定性也比较高, 算是一种较好理解的算法,也是面试官高频提问的算法之一。

Tips:关于“算法”及“排序”的基础知识,在此前“选择排序法”中已详细讲解,可点击文后的相关文章链接查看,在此不再赘述。

冒泡排序法的原理

基本原理

从序列头部开始遍历,两两比较,如果前者比后者大,则交换位置,直到最后将最大的数(本次排序最大的数)交换到无序序列的尾部,从而成为有序序列的一部分;

下次遍历时,此前每次遍历后的最大数不再参与排序;

多次重复此操作,直到序列排序完成。

由于在排序的过程中总是小数往前放,大数往后放,类似于气泡逐渐向上漂浮,所以称作冒泡排序。

原理图解

Tips:蓝色代表在一轮排序中等待交换,黑色代表在该轮排序中已交换完成,红色代表已排序完成

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

实现冒泡的步骤分解

使用for循环确定排序次数

由于待排序的序列只剩下一个数时已经能够确定顺序,则无需进行排序,因此,排序次数为序列长度 – 1。

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

 每次排序的比较次数控制

每次排序,序列中的多个数字要分别进行两两比较,多次的比较需要利用for语句来进行实现。该for循环嵌套于排序次数的for循环当中(形成双for的嵌套)。

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

Tips:j 需要设置为小于 len - i - 1,减i的原因是已经排序完成的数不再参与比较,减1的原因是数组下标索引值从0开始。

核心功能 — 两两比较并根据情况交换位置

比较两数大小,如果前者比后者大,则进行数值的交换,也就是交换位置。

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

冒泡排序法完整代码

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

冒泡排序法的优化

假如序列的数据为:[0, 1, 2, 3, 4, 5];

使用上面的冒泡排序法进行排序,得到的结果肯定没有问题,但是,待排序的序列是有序的,理论上是无需遍历排序。

当前的算法不管初始的序列是否有序,都会进行遍历排序,效率会比较低,因此需要优化当前的排序算法。

在如下的算法中,引入一个swap变量,每一次排序之前初始化为false;若发生两数交换位置,则将其设置为true。

在每次排序结束时候判断swap是否为false,如果是,则说明序列已排序完成或者序列本身是有序序列,就不再进行下一次排序。

通过此方法,减少不必要的比较和位置交换,进一步提高算法的性能。

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

冒泡排序法的效率

时间复杂度

最佳状态:待排序的序列本身是有序序列,排序次数根据优化后的代码,可以得出是n-1次,时间复杂度为O(n);

最坏的情况:待排序的序列是逆序的,此时需要排序1 + 2 +3 ……(n - 1) = n(n – 1 )/2次

时间复杂度为O(n^2)。

空间复杂度

冒泡排序法需要一个额外空间(temp变量)来交换元素的位置,所以空间复杂度为O(1)。

算法的稳定性

当相邻元素相等时,并不需要交换位置,也就不会出现相同元素的前后顺序发生改变,所以,是稳定性排序。

O是个啥?!

时间复杂度,更准确的说该是描述一个算法在问题规模不断增大时对应的时间增长曲线。所以,这些增长数量级并不是一个准确的性能评价,可以理解为一个近似值。(空间复杂度同理)

O(n?)表示当n很大的时候,复杂度约等于Cn?,C是某个常数,简单说就是当n足够大的时候,随着n的线性增长复杂度将沿平方增长。

O(n)表示,n很大的时候复杂度约等于Cn,C是某个常数。简言之:随着n的线性增长,复杂度沿线性级别增长。

O(1)表示,n很大的时候,复杂度基本就不增长了。简言之:随着n的线性增长,复杂度不受n的影响,沿常数级别增长(此处的常数是1)。

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

Tips:图中O(1)紧贴着X轴,并看不太清楚。

Tips:该图来源于“Stack Overflow”网站。

相关文章链接

选择排序法

开开心心每一天

生活艰辛,代码不易,但,不要忘记微笑!

算法之旅 | 冒泡排序法 - 独行冰海 - 独行冰海

Atas ialah kandungan terperinci 冒泡排序法详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mengisih foto mengikut tarikh yang diambil dalam Windows 11/10 Bagaimana untuk mengisih foto mengikut tarikh yang diambil dalam Windows 11/10 Feb 19, 2024 pm 08:45 PM

Artikel ini akan memperkenalkan cara mengisih gambar mengikut tarikh penangkapan dalam Windows 11/10, dan juga membincangkan perkara yang perlu dilakukan jika Windows tidak menyusun gambar mengikut tarikh. Dalam sistem Windows, menyusun foto dengan betul adalah penting untuk memudahkan anda mencari fail imej. Pengguna boleh mengurus folder yang mengandungi foto berdasarkan kaedah pengisihan yang berbeza seperti tarikh, saiz dan nama. Selain itu, anda boleh menetapkan tertib menaik atau menurun mengikut keperluan untuk menyusun fail dengan lebih fleksibel. Cara Isih Foto mengikut Tarikh Diambil dalam Windows 11/10 Untuk mengisih foto mengikut tarikh yang diambil dalam Windows, ikut langkah berikut: Buka Gambar, Desktop atau mana-mana folder tempat anda meletakkan foto Dalam menu Reben, klik

Cara mengisih e-mel mengikut penghantar, subjek, tarikh, kategori, saiz dalam Outlook Cara mengisih e-mel mengikut penghantar, subjek, tarikh, kategori, saiz dalam Outlook Feb 19, 2024 am 10:48 AM

Outlook menawarkan banyak tetapan dan ciri untuk membantu anda mengurus kerja anda dengan lebih cekap. Salah satunya ialah pilihan pengisihan yang membolehkan anda mengkategorikan e-mel anda mengikut keperluan anda. Dalam tutorial ini, kami akan mempelajari cara menggunakan ciri pengisihan Outlook untuk menyusun e-mel berdasarkan kriteria seperti pengirim, subjek, tarikh, kategori atau saiz. Ini akan memudahkan anda memproses dan mencari maklumat penting, menjadikan anda lebih produktif. Microsoft Outlook ialah aplikasi berkuasa yang memudahkan untuk mengurus jadual e-mel dan kalendar anda secara berpusat. Anda boleh menghantar, menerima dan mengatur e-mel dengan mudah, manakala fungsi kalendar terbina dalam memudahkan untuk menjejaki acara dan janji temu anda yang akan datang. Bagaimana untuk berada di Outloo

Penjelasan terperinci tentang mendapatkan hak pentadbir dalam Win11 Penjelasan terperinci tentang mendapatkan hak pentadbir dalam Win11 Mar 08, 2024 pm 03:06 PM

Sistem pengendalian Windows ialah salah satu sistem pengendalian yang paling popular di dunia, dan versi baharunya Win11 telah menarik perhatian ramai. Dalam sistem Win11, mendapatkan hak pentadbir adalah operasi penting Hak pentadbir membolehkan pengguna melakukan lebih banyak operasi dan tetapan pada sistem. Artikel ini akan memperkenalkan secara terperinci cara mendapatkan kebenaran pentadbir dalam sistem Win11 dan cara mengurus kebenaran dengan berkesan. Dalam sistem Win11, hak pentadbir dibahagikan kepada dua jenis: pentadbir tempatan dan pentadbir domain. Pentadbir tempatan mempunyai hak pentadbiran penuh ke atas komputer tempatan

Penjelasan terperinci tentang operasi bahagian dalam Oracle SQL Penjelasan terperinci tentang operasi bahagian dalam Oracle SQL Mar 10, 2024 am 09:51 AM

Penjelasan terperinci tentang operasi bahagi dalam OracleSQL Dalam OracleSQL, operasi bahagi ialah operasi matematik yang biasa dan penting, digunakan untuk mengira hasil pembahagian dua nombor. Bahagian sering digunakan dalam pertanyaan pangkalan data, jadi memahami operasi bahagian dan penggunaannya dalam OracleSQL adalah salah satu kemahiran penting untuk pembangun pangkalan data. Artikel ini akan membincangkan pengetahuan berkaitan operasi bahagian dalam OracleSQL secara terperinci dan menyediakan contoh kod khusus untuk rujukan pembaca. 1. Operasi bahagian dalam OracleSQL

Bagaimana untuk mengisih markah WPS Bagaimana untuk mengisih markah WPS Mar 20, 2024 am 11:28 AM

Dalam kerja kami, kami sering menggunakan perisian wps Terdapat banyak cara untuk memproses data dalam perisian wps, dan fungsinya juga sangat berkuasa Kami sering menggunakan fungsi untuk mencari purata, ringkasan, dan sebagainya kaedah yang boleh digunakan untuk data statistik telah disediakan untuk semua orang dalam perpustakaan perisian WPS Di bawah kami akan memperkenalkan langkah-langkah bagaimana untuk mengisih markah dalam WPS Selepas membaca ini, anda boleh belajar daripada pengalaman. 1. Mula-mula buka jadual yang perlu diberi ranking. Seperti yang ditunjukkan di bawah. 2. Kemudian masukkan formula =pangkat(B2, B2: B5, 0), dan pastikan anda memasukkan 0. Seperti yang ditunjukkan di bawah. 3. Selepas memasukkan formula, tekan kekunci F4 pada papan kekunci komputer Langkah ini adalah untuk menukar rujukan relatif kepada rujukan mutlak.

Penjelasan terperinci tentang peranan dan penggunaan pengendali modulo PHP Penjelasan terperinci tentang peranan dan penggunaan pengendali modulo PHP Mar 19, 2024 pm 04:33 PM

Operator modulo (%) dalam PHP digunakan untuk mendapatkan baki pembahagian dua nombor. Dalam artikel ini, kami akan membincangkan peranan dan penggunaan pengendali modulo secara terperinci, dan memberikan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. 1. Peranan pengendali modulo Dalam matematik, apabila kita membahagi integer dengan integer lain, kita mendapat hasil bagi dan baki. Sebagai contoh, apabila kita membahagi 10 dengan 3, hasil bahagi ialah 3 dan selebihnya ialah 1. Operator modulo digunakan untuk mendapatkan baki ini. 2. Penggunaan operator modulo Dalam PHP, gunakan simbol % untuk mewakili modulus

Penjelasan terperinci tentang fungsi sistem panggilan sistem linux(). Penjelasan terperinci tentang fungsi sistem panggilan sistem linux(). Feb 22, 2024 pm 08:21 PM

Penjelasan terperinci tentang fungsi sistem panggilan sistem Linux() Panggilan sistem ialah bahagian yang sangat penting dalam sistem pengendalian Linux Ia menyediakan cara untuk berinteraksi dengan kernel sistem. Antaranya, fungsi system() adalah salah satu fungsi panggilan sistem yang biasa digunakan. Artikel ini akan memperkenalkan penggunaan fungsi system() secara terperinci dan memberikan contoh kod yang sepadan. Konsep Asas Panggilan Sistem Panggilan sistem ialah satu cara untuk atur cara pengguna berinteraksi dengan kernel sistem pengendalian. Program pengguna meminta sistem pengendalian dengan memanggil fungsi panggilan sistem

Penjelasan terperinci tentang perintah curl Linux Penjelasan terperinci tentang perintah curl Linux Feb 21, 2024 pm 10:33 PM

Penjelasan terperinci tentang perintah curl Linux Ringkasan: curl ialah alat baris arahan yang berkuasa yang digunakan untuk komunikasi data dengan pelayan. Artikel ini akan memperkenalkan penggunaan asas perintah curl dan memberikan contoh kod sebenar untuk membantu pembaca memahami dan menggunakan arahan dengan lebih baik. 1. Apakah curl? curl ialah alat baris arahan yang digunakan untuk menghantar dan menerima pelbagai permintaan rangkaian. Ia menyokong berbilang protokol, seperti HTTP, FTP, TELNET, dll., dan menyediakan fungsi yang kaya, seperti muat naik fail, muat turun fail, penghantaran data, proksi

See all articles