冒泡排序——簡單理解和使用

閱前聲明:如果想直接了解冒泡排序的簡化思想,請跳至文章尾部

在介紹之前,我們先看一個用到該功能的實戰訓練(本人也是從中開始認識到冒泡排序這個函數定義)

對于小白來說,我的思路如下:

1.題目中涉及到三個數組,首先scanf兩個整型變量m,n,其次定義三個變長數組arr[m + n] 、arr1[m] 、arr2[n];

2.我們了解到一個關鍵信息,兩個輸入的數組為升序類型,那么考慮兩個數組中同下標值的元素進行比較,然后根據他們比較的結果在arr中進行元素輸入;

具體操作編碼如下:(為錯誤示范,可以理解和糾正一下編碼思路)

void input_arr(int arr[], int a,int b)
{for (a = 0; a < b; a++){scanf("%d", &arr[a]);}
}
int smaller(int a, int b)
{if (a >= b)return b;elsereturn a;
}
int bigger(int a, int b)
{if (a >= b)return a;elsereturn b;
}
void print(int a , int arr[])
{int i;for (i = 0; i < a; i++){printf("%d ", arr[i]);}
}
int main()
{int m, n;scanf("%d %d", &m, &n);int arr1[m];//先將三個數組定義出來int arr2[n];int arr[m + n];int i,j;input_arr(arr1, i, m);//輸入兩個數組input_arr(arr2, i, n);int b = smaller(m,n);//先比較m,n;用新賦值的變量去參與后續判斷int c = bigger(m,n);for (j = 0; j < c; j++)//利用變量j對arr數組的元素進行輸入{if (j < b)//在相同下標區間內,進行大小判斷,要將兩個同數量的數組比較并放入新的數組中,需要2b個空間,下標位數為2b-1{arr[2 * j ] = smaller(arr1[j], arr2[j]);//先進行一個同下標數的大小判斷,小的放在本位上,大的放在+1位上arr[2 * j + 1] = bigger(arr1[j], arr2[j]);if (j >= 1){arr[2 * j] = bigger(smaller(arr1[j], arr2[j]), arr[2 * j - 1]);//將新的小值與前一次的大值進行比較,糾正排序arr[2 * j - 1] = smaller(smaller(arr1[j], arr2[j]), arr[2 * j - 1]);}}//到這里完成了0-2b-1的數值輸入,共2b個數else if (j == b){if (b == m) //判斷元素數量大的一方數組后,對超出的第一位數組值進行比較{arr[2 * b] = bigger(arr2[b], arr[2 * b - 1]);arr[2 * b - 1] = smaller(arr2[b], arr[2 * b - 1]);}else{arr[2 * b] = bigger(arr1[b], arr[2 * b - 1]);arr[2 * b - 1] = smaller(arr1[b], arr[2 * b - 1]);}}else{if (b == m){arr[2 * b + j - b] = arr2[j];}else{arr[2 * b + j - b] = arr1[j];}}}for (int s = m + n - 1; s > 0; s--){int temp;if (arr[s] < arr[s - 1]){temp = arr[s];arr[s] = arr[s - 1];arr[s - 1] = temp;}}print(m + n, arr);return 0;
}//僅適合升序,且沒有相同數的兩個數組

在這個輸入例子中,編寫的代碼出現了明顯的錯誤,存在交替的大小變化,這是由于下標值相差太多的元素之間存在漏比較的情況,這是由于我們比較方式的局限性導致的,不要簡單的把一個元素集合按照規定的容量分為多個比較區間,進行依次比較后糾正的元素排列就是我們想要的結果,下面是這種錯誤觀念的示意圖

一個數字,確定其在整型數組中正確的大小排序和下標值,應該將其和每一個元素進行比較。

那么我們可以得出冒泡排序的關鍵思想:

假設一個整型數組 中有N個元素,每一個元素確定自己的正確位置需要與剩余的N-1個元素進行比較,而每一個元素都需要完成這個過程 即 實現數組的正確排序,我們需要完成N * (N - 1)次的比較,細分下來就是C語言中的兩個for循環的嵌套使用,具體如下:

	for (int a = 0; a < m + n; a++){for (int b = 0; b < m + n - 1; b++){int temp = 0;if (arr[b] > arr[b + 1]){temp = arr[b + 1];//此時的temp僅為存儲數據的一個整型變量,無其他特殊含義arr[b + 1] = arr[b];arr[b] = temp;}}}

因此,我們可以簡化并且加深對冒泡排序這個代碼塊的理解。

有表述不當的地方辛苦不吝賜教,三克油。

打怪升級中..................................................................................................................................

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93599.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93599.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI應用商業化加速落地 2025智能體爆發與端側創新成增長引擎

今年以來&#xff0c;人工智能 (AI) 正在進入從算力投入到云服務消耗再到商業化收入&#xff0c;最終回到算力再投入的良性循環&#xff0c;而 AI 應用的起量正是推動這一飛輪效應的關鍵。7 月 31 日&#xff0c;國務院常務會議審議通過了《關于深入實施 “人工智能 ” 行動的意…

Pytest測試框架基礎及進階

Pytest測試框架基礎# Pytest測試框架介紹# Pytest是Python一款三方測試框架&#xff0c;用于編寫和運行單元測試、集成測試和功能測試。Pytest測試框架具有簡單、靈活、易于擴展等特點&#xff0c;被廣泛應用于Python項目的測試工作中。 Pytest主要特點&#xff1a; 簡單易用…

航空裝備先進加工工藝與制造技術論壇——2025成都航空裝備展

300參展企業 11500㎡展區面積 7大專業展區 12000觀眾規模15同期會議 160發言嘉賓 5000參會嘉賓 100媒體報道航空工業飛速發展&#xff0c;先進加工工藝與制造技術成為了支撐航空裝備性能提升、質量保障和產能優化的核心基石。為探索前沿技術路徑、凝聚行業創新力量&#xff0c;…

為什么品牌更愿意為新品打廣告?

品牌資源向新品廣告傾斜&#xff0c;可以說是市場上的普遍現象。尤其對于沒有明星產品的品牌而言&#xff0c;新品推廣時企業的重要曝光節點。下面就讓我們一同來了解下&#xff0c;為什么品牌更愿意為新品打廣告。一、市場需求更充分新品廣告往往承擔著市場教育的功能&#xf…

電子電氣架構 --- 關于整車信息安全的一些思考

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

報錯:Eplan無法打開數據庫的解決方法

詳細報錯信息&#xff1a;無法打開數據庫 E:\eplan\部件\Microsoft\ESS_part001.mdb。針對64位版本的EPLAN 平臺需要使用64位版本的Microsoft Office. 一、報錯及解決方法 報錯信息&#xff1a;無法打開數據庫 E:\eplan\部件\Microsoft\ESS_part001.mdb。針對64位版本的EPLAN 平…

深度學習篇---卷積核的權重

卷積核權重&#xff1a;在深度學習的卷積操作中&#xff0c;“卷積核的權重” 是最核心的概念之一&#xff0c;它決定了卷積核能從圖像中 “看到” 什么特征&#xff08;比如邊緣、紋理&#xff0c;甚至是眼睛、車輪這樣的復雜結構&#xff09;。我們可以把它理解成卷積核的 “…

SMTPman,smtp ssl助力安全高效郵件傳輸!

SMTPman&#xff0c;smtp ssl助力安全高效郵件傳輸&#xff01;SMTPman&#xff0c;smtp ssl不僅僅是一種郵件協議方式&#xff0c;更是企業日常運營的重要支撐。通過SMTPman&#xff0c;smtp ssl&#xff0c;用戶可以獲得更快的投遞速度&#xff0c;更穩定的連接&#xff0c;以…

學習日志37 python

1 Python 和 Java 在類屬性&#xff08;靜態屬性&#xff09;和實例屬性的處理題目執行以下程序&#xff0c;輸出結果為&#xff08;&#xff09; class Base(object):count 0def __init__(self):pass b1 Base() b2 Base() b1.count b1.count 1 print(b1.count,end" …

對于QPS的理解和簡單

QPS&#xff08;Queries Per Second&#xff09; 是衡量系統吞吐量的核心指標&#xff0c;表示每秒能處理的請求數量。以下是關于QPS的完整解析和實踐指南&#xff1a;一、QPS的核心公式 QPS 總請求量 / 請求總時間&#xff08;秒&#xff09;典型場景計算&#xff1a; 日請求…

【筆記ing】考試腦科學 腦科學中的高效記憶法

前言本書是拙作《高中生學習法》的修訂版。《高中生學習法》出版已有十余年。這期間&#xff0c;腦科學研究不斷進步&#xff0c;十幾年前無法解釋的事情現在已經開始逐漸明晰。同時&#xff0c;書中有些內容甚至已經被明確證實是錯誤的。也就是說&#xff0c;《高中生學習法》…

Web安全 - 構建安全可靠的API:基于國密SM2/SM3的文件上傳方案深度解析

文章目錄概述1. 緣起&#xff1a;挑戰與目標2 . 核心架構&#xff1a;非對稱簽名與摘要算法的珠聯璧合威脅模型&#xff08;我們要防的攻擊&#xff09;密鑰管理體系3 . 簽名與驗證&#xff1a;一步一解&#xff0c;安全閉環3.1 A系統&#xff1a;簽名的生成&#xff08;請求前…

【MyBatis-Plus】一、快速入門

這里寫自定義目錄標題MyBatis-Plus 概述快速入門入門案例常用注解常見配置MyBatis-Plus 概述 MyBatis-Plus 簡介&#xff1a; MyBatis-Plus 是在 MyBatis 基礎上開發的一個 增強工具包&#xff0c;它簡化了 MyBatis 的開發&#xff0c;減少了大量重復代碼。它保持了 MyBatis …

PostgreSQL導入mimic4

一、PostgreSQL連接驗證 正確連接命令 使用psql工具連接目標數據庫&#xff0c;格式為&#xff1a;psql -h 127.0.0.1 -U 用戶名 -d 數據庫名 --password 示例&#xff08;用戶名Shinelon&#xff0c;數據庫mimic&#xff09;&#xff1a;psql -h 127.0.0.1 -U Shinelon -d mi…

css中 hsl() 的用法

好的 &#x1f44d; 我來詳細介紹一下 CSS hsl() 的用法。1. 基本語法 color: hsl(hue, saturation, lightness);hue&#xff08;色相&#xff09; 取值范圍&#xff1a;0 ~ 360&#xff08;角度值&#xff0c;代表色環的角度&#xff09;0 或 360 → 紅色120 → 綠色240 → 藍…

企業級Spring事務管理:從單體應用到微服務分布式事務完整方案

企業級Spring事務管理&#xff1a;從單體應用到微服務分布式事務完整方案 &#x1f31f; 你好&#xff0c;我是 勵志成為糕手 &#xff01; &#x1f30c; 在代碼的宇宙中&#xff0c;我是那個追逐優雅與性能的星際旅人。 ? 每一行代碼都是我種下的星光&#xff0c;在邏輯的土…

繼續記錄面試題

坐在工位&#xff0c;沒事干心慌的不行&#xff0c;可能也是房貸壓的。一閑下來就開始胡思亂想&#xff0c;無法沉下心去背那些八股文。這才剛剛接到離職通知第三天啊。而且、我還在坐班呢&#xff01;&#xff01;&#xff01; 哎、怪不得有句老話說的&#xff0c;人窮志短&a…

從零開始學習:深度學習(基礎入門版)(第2天)

&#xff08;一&#xff09;在pycharm軟件中&#xff0c;用python語言&#xff0c;opencv庫實現以下功能(1.1)圖片的邊界填充核心流程&#xff1a;讀取原始圖像使用 cv2.imread() 加載名為 yueshan.png 的圖像文件統一邊界參數設定四周留白尺寸均為 50px&#xff08;上下左右各…

HTTP協議-3-HTTP/2是如何維持長連接的?

先說結論&#xff1a;HTTP/2的“長連接” 一個TCP連接 多路復用 二進制幀 流控制 持久會話管理 它不只是“連接不斷”&#xff0c;更關鍵的是&#xff1a;在這個長連接上&#xff0c;可以同時并發傳輸成百上千個請求和響應&#xff0c;互不阻塞&#xff01; 1、HTTP/2的“…

圖解希爾排序C語言實現

1 希爾排序 希爾排序&#xff08;Shell Sort&#xff09;是D.L.Shell于1959年提出來的一種排序算法&#xff0c;在這之前排序算法的時間復雜度基本都是O(n)&#xff0c;希爾排序算法是突破這個時間復雜度的第一批算法之一。 1.1 基本概念與原理 希爾排序通過將原始列表分割成若…