網站首頁 編程語言 正文
今天我們來用C語言實現一下冒泡排序
首先我們來了解一下什么叫做冒泡排序,冒泡顧名思義把質量輕的氣體(如二氧化碳一樣)浮到水面上(如可樂中的二氧化碳),因此冒泡排序的原理就是N個元素在一個周期中,微觀上依次進行兩兩元素的比較,小的元素就被放在前面,大的元素放在后面,以此來進行N-1個周期,來完成冒泡排序。
上文中的一個周期,即外循環,依次進行比較,即內循環。
文字看著很迷糊?沒事兒,上圖
如圖所示,兩兩元素依次進行比較,小的元素往前移動,大的元素往后移動,直至元素順序是升序的形式,即移動了 元素-1 個周期
圖看明白了,還不知道該怎么寫代碼?這就上!
#include <stdio.h> #include <string.h> int main() { int n[9] = { 3,1,6,5,9,7,8,2,4 }; int nums = sizeof(n) / sizeof(int), temp, i; for (i = 1; i < nums ; i++) {//外層循環,表示來回多少次 for (int j = nums - 1; j >= i; j--) //內層循環,表示一次來回會對比多少次,注意數組下標,不要越界 { printf("目前i的值:%d ", i); printf("目前j的值:%d ", j); if (n[j-1] > n[j]) { temp = n[j-1]; n[j-1] = n[j]; n[j] = temp; } printf("該次交換后的結果:"); for (int a = 0; a < nums; a++) { printf("%d ", n[a]); } printf("\n\n"); } } printf("最終交換后的結果:"); for (int a = 0; a < nums; a++) { printf("%d ", n[a]); } printf("\n"); }
代碼同時把每次循環的結果都進行了輸出,方便觀察排序的結果,同時也可以和圖片進行比較
這里對代碼一些小細節進行一下說明
首先就是sizeof()函數,這個函數使用時必須要引用頭文件string.h,他的用法就是計算內容的字節,int型占4個字節 n數組有9個int型的元素,所以占36個字節,除以int型的4字節,就是他的數組元素個數。
有人會好奇,明明寫了一個n[9]了,為什么要多此一舉寫一個這個計算表達式,其實在很多時候給的數組都不會是這么簡單明了的,所以我們最好通過計算來算得數組元素的個數。
第二個問題就是,有些小白會卡在這個if判斷語句這里,不知道怎么實現的
if (n[j-1] > n[j]) { temp = n[j-1]; n[j-1] = n[j]; n[j] = temp; }
其實很簡單,就是找一個中間值。我們在這里假設要交換a,b兩數的值,我們這里就要設置一個中間值,通常設置為temp,把a的值賦值到temp上(然后現在就相當于有兩個a,此刻我們改變a本身的值,temp的值也不會改變),此時我們就可以把b的值賦予到a上面,這一步b對a的值傳輸已經結束,最后一步就是把temp的值賦予到b上。大功告成,a,b的值交換成功。
原文鏈接:https://blog.csdn.net/weixin_45821611/article/details/122557893
相關推薦
- 2022-03-19 C++?OpenCV技術實戰之身份證離線識別_C 語言
- 2023-08-13 基于TP5框架的excel導入功能
- 2022-07-07 C++實現數組中元素組合出最大值_C 語言
- 2023-01-31 Android如何實現一個DocumentProvider示例詳解_Android
- 2022-06-23 C++詳解哈夫曼樹的概念與實現步驟_C 語言
- 2022-03-15 3 Segmentation fault (core dumped) ./a.out Exited
- 2024-03-22 springboot 中 Getmapping獲取參數的方式
- 2022-04-09 cas5 編譯安裝依賴時提示: Failure to find net.shibboleth.too
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支