国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

排序算法之冒泡排序(圖解)

這篇具有很好參考價(jià)值的文章主要介紹了排序算法之冒泡排序(圖解)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.冒泡排序

wikipedia:

冒泡排序(英語:Bubble Sort)又稱為泡式排序,是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果它們的順序錯(cuò)誤就把它們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。

為什么介紹用“浮”呢?看它的動(dòng)圖應(yīng)該就可以理解了。

排序算法之冒泡排序(圖解)

總結(jié)一下就是:比較相鄰的兩個(gè)元素然后交換這兩者,一直到一整個(gè)數(shù)列都按照順序排列。

2.冒泡排序的步驟

可以先看動(dòng)圖,如果動(dòng)圖就能夠理解的話,就不需要看下面的步驟了。
排序算法之冒泡排序(圖解)

如果覺得動(dòng)圖太快,可以按照下面的步驟一步步理解。

第一次迭代

  1. 從第一個(gè)下標(biāo)開始,也就是0,比較第一個(gè)和第二個(gè)元素。
  2. 如果第一個(gè)元素比第二個(gè)元素大,那就交換兩者。
  3. 然后比較第二個(gè)元素和第三個(gè)元素,如果兩者也不是升序,那交換兩者。
  4. 一直比較和交換,直到最后。

排序算法之冒泡排序(圖解)

之后的迭代

冒泡排序就是不斷重復(fù)迭代的過程,隨著不斷的交換,大的元素會(huì)和動(dòng)圖一樣交換到后面,小的元素則會(huì)換到前面。下圖是第二次迭代。

排序算法之冒泡排序(圖解)

下圖是最后一次迭代,當(dāng)-2和-9交換后,這一整個(gè)數(shù)組的排序就完成了。

排序算法之冒泡排序(圖解)

3.冒泡排序的實(shí)現(xiàn)

偽代碼

function bubble_sort (array, length) {
    var i, j;
    for(i from 0 to length-1){
        for(j from 0 to length-1-i){
            if (array[j] > array[j+1])
                swap(array[j], array[j+1])
        }
    }
}

助記碼

i∈[0,N-1)               //循環(huán)N-1遍
   j∈[0,N-1-i)           //每遍循環(huán)要處理的無序部分
     swap(j,j+1)          //兩兩排序(升序/降序)

Python

# Bubble sort in Python

def bubbleSort(array):
    
  # loop to access each array element
  for i in range(len(array)):

    # loop to compare array elements
    for j in range(0, len(array) - i - 1):

      # compare two adjacent elements
      # change > to < to sort in descending order
      if array[j] > array[j + 1]:

        # swapping elements if elements
        # are not in the intended order
        temp = array[j]
        array[j] = array[j+1]
        array[j+1] = temp


data = [-2, 45, 0, 11, -9]

bubbleSort(data)

print('Sorted Array in Ascending Order:')
print(data)

Java

// Bubble sort in Java

import java.util.Arrays;

class Main {

  // perform the bubble sort
  static void bubbleSort(int array[]) {
    int size = array.length;
    
    // loop to access each array element
    for (int i = 0; i < size - 1; i++)
    
      // loop to compare array elements
      for (int j = 0; j < size - i - 1; j++)

        // compare two adjacent elements
        // change > to < to sort in descending order
        if (array[j] > array[j + 1]) {

          // swapping occurs if elements
          // are not in the intended order
          int temp = array[j];
          array[j] = array[j + 1];
          array[j + 1] = temp;
        }
  }

  public static void main(String args[]) {
      
    int[] data = { -2, 45, 0, 11, -9 };
    
    // call method using class name
    Main.bubbleSort(data);
    
    System.out.println("Sorted Array in Ascending Order:");
    System.out.println(Arrays.toString(data));
  }
}

C

// Bubble sort in C

#include <stdio.h>

// perform the bubble sort
void bubbleSort(int array[], int size) {

  // loop to access each array element
  for (int step = 0; step < size - 1; ++step) {
      
    // loop to compare array elements
    for (int i = 0; i < size - step - 1; ++i) {
      
      // compare two adjacent elements
      // change > to < to sort in descending order
      if (array[i] > array[i + 1]) {
        
        // swapping occurs if elements
        // are not in the intended order
        int temp = array[i];
        array[i] = array[i + 1];
        array[i + 1] = temp;
      }
    }
  }
}

// print array
void printArray(int array[], int size) {
  for (int i = 0; i < size; ++i) {
    printf("%d  ", array[i]);
  }
  printf("\n");
}

int main() {
  int data[] = {-2, 45, 0, 11, -9};
  
  // find the array's length
  int size = sizeof(data) / sizeof(data[0]);

  bubbleSort(data, size);
  
  printf("Sorted Array in Ascending Order:\n");
  printArray(data, size);
}

C++

// Bubble sort in C++

#include <iostream>
using namespace std;

// perform bubble sort
void bubbleSort(int array[], int size) {

  // loop to access each array element
  for (int step = 0; step < size; ++step) {
      
    // loop to compare array elements
    for (int i = 0; i < size - step; ++i) {

      // compare two adjacent elements
      // change > to < to sort in descending order
      if (array[i] > array[i + 1]) {

        // swapping elements if elements
        // are not in the intended order
        int temp = array[i];
        array[i] = array[i + 1];
        array[i + 1] = temp;
      }
    }
  }
}

// print array
void printArray(int array[], int size) {
  for (int i = 0; i < size; ++i) {
    cout << "  " << array[i];
  }
  cout << "\n";
}

int main() {
  int data[] = {-2, 45, 0, 11, -9};
  
  // find array's length
  int size = sizeof(data) / sizeof(data[0]);
  
  bubbleSort(data, size);
  
  cout << "Sorted Array in Ascending Order:\n";  
  printArray(data, size);
}

4.冒泡排序的復(fù)雜度

時(shí)間復(fù)雜度
最優(yōu) O(n)
最壞 O( n 2 n^2 n2)
平均 O( n 2 n^2 n2)
空間復(fù)雜度 O(1)
穩(wěn)定性 Yes

平均復(fù)雜度的計(jì)算

循環(huán) 比較的次數(shù)
1st (n-1)
2nd (n-2)
3rd (n-3)
last 1

所以,比較的次數(shù)是

(n-1) + (n-2) + (n-3) +.....+ 1 = n(n-1)/2

基本上等于 n 2 n^2 n2文章來源地址http://www.zghlxwxcb.cn/news/detail-418119.html

到了這里,關(guān)于排序算法之冒泡排序(圖解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)與算法】排序算法:冒泡排序,冒泡排序優(yōu)化,選擇排序、選擇排序優(yōu)化

    【數(shù)據(jù)結(jié)構(gòu)與算法】排序算法:冒泡排序,冒泡排序優(yōu)化,選擇排序、選擇排序優(yōu)化

    目錄 一、冒泡排序 1、冒泡排序思想 2、冒泡排序算法的性能分析 代碼實(shí)現(xiàn): 二、選擇排序 1、選擇排序思想 2、選擇排序算法的性能分析? 代碼實(shí)現(xiàn): 1、冒泡排序思想 冒泡排序的基本思想是通過相鄰元素之間的比較和交換來逐步將最大(或最小)的元素移到右邊(或左邊

    2024年01月19日
    瀏覽(26)
  • C++常見排序算法——冒泡排序算法

    首先說一下冒泡排序的基本算法思想: 它重復(fù)地走訪過要排序的元素列,依次比較兩個(gè)相鄰的元素,如果順序(如從大到小、首字母從Z到A)錯(cuò)誤就把他們交換過來。 這個(gè)算法的名字由來是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端(升序或降序排列),就如同碳酸

    2023年04月08日
    瀏覽(24)
  • 排序算法:冒泡排序

    冒泡排序是入門級的算法,但也有一些有趣的玩法。通常來說,冒泡排序有三種寫法: 一邊比較一邊向后兩兩交換,將最大值 / 最小值冒泡到最后一位; 經(jīng)過優(yōu)化的寫法:使用一個(gè)變量記錄當(dāng)前輪次的比較是否發(fā)生過交換,如果沒有發(fā)生交換表示已經(jīng)有序,不再繼續(xù)排序;

    2024年02月11日
    瀏覽(19)
  • 常見排序算法之冒泡排序

    常見排序算法之冒泡排序

    顧得泉: 個(gè)人主頁 個(gè)人專欄: 《Linux操作系統(tǒng)》??《C/C++》??《LeedCode刷題》 鍵盤敲爛,年薪百萬! ??????? 冒泡排序,英文名Bubble?Sort,是一種相對基礎(chǔ)的 交換排序 方法。這種排序算法的名字來源于它操作的過程,可以類比為數(shù)列中的每一個(gè)元素都可以像小氣泡一樣

    2024年02月05日
    瀏覽(16)
  • 排序算法之二:冒泡排序

    冒泡排序是交換排序 基本思想:所謂交換,就是根據(jù)序列中兩個(gè)記錄鍵值的比較結(jié)果來對換這兩個(gè)記錄在序列中的位置,交換排序的特點(diǎn)是:將鍵值較大的記錄向序列的尾部移動(dòng),鍵值較小的記錄向序列的前部移動(dòng)。 第一趟:將最大的值排到最后 第二趟:將次大的值排到倒

    2024年02月04日
    瀏覽(18)
  • 排序算法(1):冒泡排序

    排序算法(1):冒泡排序

    (??? ),Hello我是 祐言QAQ 我的博客主頁:C/C++語言,數(shù)據(jù)結(jié)構(gòu),Linux基礎(chǔ),ARM開發(fā)板,網(wǎng)絡(luò)編程等領(lǐng)域UP?? 快上??,一起學(xué)習(xí),讓我們成為一個(gè)強(qiáng)大的攻城獅! 送給自己和讀者的一句雞湯??: 集中起來的意志可以擊穿頑石! 作者水平很有限,如果發(fā)現(xiàn)錯(cuò)誤,請?jiān)谠u論區(qū)指

    2024年02月12日
    瀏覽(15)
  • 排序:冒泡排序算法分析

    基于“交換”的排序︰ 根據(jù)序列中兩個(gè)元素的比較結(jié)果來對換這兩個(gè)記錄在序列中的位置。 交換排序包括 冒泡排序 和 快速排序 。 1.算法原理 從后往前(或從前往后)兩兩比較相鄰元素的值, 若為逆序(即 A [ i ? 1 ] A [ i ] A[i-1]A[i] A [ i ? 1 ] A [ i ] ) ,則交換它們,直到

    2024年02月07日
    瀏覽(15)
  • 排序算法之詳解冒泡排序

    排序算法之詳解冒泡排序

    冒泡排序顧名思義,就是像冒泡一樣,泡泡在水里慢慢升上來,由小變大。 雖然冒泡排序和冒泡并不完全一樣,但卻可以幫助我們理解冒泡排序。 一組無序的數(shù)組,要求我們從小到大排列 我們可以先將最大的元素放在數(shù)組末尾 再將第二大的數(shù)放在數(shù)組的倒數(shù)第二個(gè)位置 再

    2023年04月25日
    瀏覽(24)
  • 排序算法(一) -- 選擇排序和冒泡排序

    選擇排序和冒泡排序是我們初學(xué)C語言必學(xué)的兩種簡單的排序算法,也是我們以后學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法課程中更復(fù)雜的排序算法的基礎(chǔ)。本文用由淺入深的邏輯條理,試圖將這兩種排序算法講解清楚。 本文所有的排序均是針對一維數(shù)組的,全文所用的一維數(shù)組的例子如下: 一

    2024年02月06日
    瀏覽(25)
  • 排序算法1:冒泡排序、快速排序、插入排序

    排序算法1:冒泡排序、快速排序、插入排序

    排序算法:交換類排序,插入類排序、選擇類排序、歸并類排序 交換類排序:冒泡排序、快速排序 一、冒泡排序 ?時(shí)間復(fù)雜度:內(nèi)層是ji,外層是從0到n-1,運(yùn)行的總次數(shù)是1+2+3+4+...+n-1,即O() 空間復(fù)雜度:O(1),沒有使用額外空間,不會(huì)因?yàn)閚的變化而變化 如果數(shù)組本身有序,最

    2024年02月21日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包