《看聊天記錄都學不會C語言?太菜了吧》(21)(必懂!題解)在現實生活中,打擂臺比賽爭名次竟用的是冒泡排序?

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我,若你是真心學習可以送你書籍,指導你學習,給予你目標方向的學習路線,無套路,博客為證。

本系列文章將會以通俗易懂的對話方式進行教學,對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新,包括別的語言以及實戰都將使用對話的方式進行教學,基礎編程語言教學適用于零基礎小白,之后實戰課程也將會逐步更新。

若有想學習的內容可以在評論區留言,根據大家的要求持續更新。點贊過十萬就算化成灰我也更新下一篇。(肯定不到,也會更的。)

有問題也可以在評論區留言,也可以私聊我加我好友共同交流一起進步~

喜歡內容歡迎關注我、評論、點贊、收藏,這對我很重要,謝謝~


由于部分粉絲要求想要學python,就更了這個系列,我就算是生產隊的驢、化成灰我C語言和python都一周6篇打底。可以關注我加我好友提你們想學的內容喲~

目錄

《看聊天記錄都學不會C語言?太菜了吧》(22)(必懂!題解 1-100 內素數)素數原來是質數!為什么你不早說!——(必懂!題解)求素數

《看聊天記錄都學不會C語言?太菜了吧》(21)(必懂!題解冒泡排序)在現實生活中,打擂臺比賽爭名次竟用的是冒泡排序?——(必懂!題解)冒泡必懂

《看聊天記錄都學不會C語言?太菜了吧》(20)(必懂!題解指定天數)我能知道2000年后的這個月一共有幾天——(必懂!題解)我能知道2000年后的這個月一共有幾天

《看聊天記錄都學不會C語言?太菜了吧》(19)鞏固開始,數字1、2、3、4能夠組成多少個 3 位數的不同的排列——鞏固1

《看聊天記錄都學不會C語言?太菜了吧》(18)2分鐘搞結構體——結構體

看聊天記錄都學不會C語言?太菜了吧》(17)5分鐘搞懂指針與多重指針——指針與多重指針

《看聊天記錄都學不會C語言?太菜了吧》(16)我一直以為校花很漂亮,直到我叫了她一聲…——生命空間、命名規則

《看聊天記錄都學不會C語言?太菜了吧》(15)你學了一節課的函數我5分鐘搞定了,還很熟——自定義函數傳參、返回值

《看聊天記錄都學不會C語言?太菜了吧》(14)這么神奇?我寫了20行代碼竟然一行就可以搞定?——自定義函數

《看聊天記錄都學不會C語言?太菜了吧》(13)(9*9 乘法表)尋找電腦中的盲盒彩蛋——for 循環與循環嵌套 九九乘法表

《看聊天記錄都學不會C語言?太菜了吧》(12)循環有多容易?你看一眼就懷…——循環

《看聊天記錄都學不會C語言?太菜了吧》(11)2分鐘領悟數組——數組

《看聊天記錄都學不會C語言?太菜了吧》(10)程序媛聰明絕頂了——邏輯與運算符

《看聊天記錄都學不會C語言?太菜了吧》(9)老公餅真的有老公送?——字符數組

《看聊天記錄都學不會C語言?太菜了吧》(8)牛郎和織女竟有一個孩子?——多條件if

《看聊天記錄都學不會C語言?太菜了吧(7)下一篇文章告訴你牛郎是誰——if邏輯判斷

《看聊天記錄都學不會C語言?太菜了吧(6)以前跟我說編程很難的給我站出來——浮點數及變量運算

《看聊天記錄都學不會C語言?太菜了吧(5)打了一把游戲我學會了一個編程知識?——變量輸出及占位符

《看聊天記錄都學不會C語言?太菜了吧(4)原來我早就會編程了——變量

《看聊天記錄都學不會C語言?太菜了吧(3)代碼都在談戀愛難道你不知道?——頭文件及標點

《看聊天記錄都學不會C語言?太菜了吧(2)我說編程很容易你們不服?——Devc使用及HelloWorld

《看聊天記錄都學不會C語言?太菜了吧(1)我在大佬群里問基礎問題沒人理?——學習建議


我的其它教程

教程點擊進去將會有目錄

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(1)加載Python神器!亮劍!

《看聊天記錄都學不會C#?太菜了吧》(1)從今天開始我是一個游戲開發者

你去約個會,你零基礎的同學就學完C語言知識點過完了

【小白進】大佬們學習為什么簡單?小白該如何學習?學歷不高如何找工作?副業很好賺?了解后少走彎路


作者簡介

作者名:1_bit

簡介:CSDN博客專家,2020年博客之星TOP5,藍橋簽約作者。15-16年曾在網上直播,帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息,迷茫的你會找到答案。

博客地址:https://i1bit.blog.csdn.net


🐰小C:小媛,這節課我們開始上數組排序的內容吧。

👸小媛:問題不大,不就是習題嘛,反正你寫出來的文章,寫得不好肯定被罵的,寫得好我就會了。😎

🐰小C:唔,好像很有道理,那開始吧。

👸小媛:好的。

🐰小C:我現在有一個數組,數組里面有打亂順序的數值,你能把這些數字按照從小到大的排列重寫存放到數組之中嗎?

int a[] = {11,1, 6, 3, 66, 58, 79, 33};

👸小媛:你還是慢慢來吧,別直接進入主題,我接受不了,太難了。😭

🐰小C:哈哈哈,今天我們學的排序是一個叫做冒泡排序的方法。

👸小媛:為啥叫這個名字?感覺挺有趣的,名字聽起來不難,可是總感覺學起來就超級難了。

🐰小C:哈哈哈,其實不難,我一步步跟你道來。

👸小媛:問題不大,講吧。

🐰小C:我們可以看我們需要排序的值 11,1, 6, 3, 66, 58, 79, 33,我們需要小的數在左邊,大的數在右邊,這樣就可以實現從小到大排序了。

👸小媛:是這么一回事,所以怎么做呢?

🐰小C:我們可以使用冒泡排序實現,冒泡排序是一種基礎的排序方法,主要是依照相鄰的值之間進行對比,把大的放右邊,小的放左邊,這樣就大的值就在右邊冒出來了,這就是冒泡排序。

👸小媛:我覺得你白跟我解釋了,我還是不懂。 😨

🐰小C:哈哈哈,別急,我給你說說怎么樣進行排序。我們需要排列數組的值是 11,1, 6, 3, 66, 58, 79, 33;例如我們首先拿第一個值開始進行相鄰元素的比對,也就是 11 與 1 進行對比,此時 11 比 1大,由于我們排序是從小到大進行,所以 1 和 11 交換位置,此時整個數組就變成了 1,11,6, 3, 66, 58, 79, 33。這一步懂吧?

👸小媛:你真當我傻呀。 😱

🐰小C:哈哈哈,那我們繼續。我們接著使用 11 與 6 進行對比,此時我們發現 11 大于 6,所以 11 與 6 就交換位置,此時整個數組的排列為 1,6,11, 3, 66, 58, 79, 33。這一步懂吧?

👸小媛:請繼續,我不會我會跟你說的。

🐰小C:那接著,我們使用 11 與 3 進行對比,11 比 3 大則繼續交換位置;此時數組排列為 1,6,3, 11, 66, 58, 79, 33;我們繼續使用 11 與 66 對比,結果發現 66 比 11 大,此時就不需要更換位置了,我們接著使用 66 與 58 進行對比。

👸小媛:停,為什么不是使用 11 與 66 進行對比,而是使用 58? 😢

🐰小C:你還記得我說冒泡排序是用什么元素進行對比的嗎?

👸小媛:不記得了。

🐰小C:使用相鄰的元素,此時 11 跟 66 比對過了,所以接著往下相鄰的位置進行對比 應該是 66 與 58。

👸小媛:哈哈哈,我還以為一直是 11 呢,你繼續講,我明白了。

🐰小C:之后我們使用 66 與 58 進行對比發現,66 大于 58 則交換位置,此時排列變成了 1,6,3, 11, 58, 66, 79, 33;繼續使用 66 與 79 進行對比,由于 79 大于 66 所以就不需要更換位置了;最后使用 79 與 33 進行對比,79 大于 33,兩者交換位置,此時整個數組中最大的值就出現在右邊了,簡單吧?

👸小媛:哈哈哈,不簡單,我有一種更簡單的理解方式。

🐰小C:哈哈哈,你說。

👸小媛:其實這個數列我們可以理解成一個擂臺賽,兩個人兩個人 PK,選出最強的繼續打,這樣最厲害的不就出來了?

🐰小C:唉喲,你這個理解,絕!

👸小媛:哈哈哈,是不是很厲害。

🐰小C:嗯,那你會寫了嗎?

👸小媛:…

🐰小C:那我繼續教你怎么寫。其實冒泡排序跟你說的一樣,角逐出了第一名后還有其它名詞,我們再進行幾輪冒泡就可以從從小到大完成排序了。在這里可以使用循環嵌套來實現這個排序。

👸小媛:唔,循環真有用。

🐰小C:首先我們新建一個循環,畢竟每個元素都需要得到。

# include <stdio.h>
int main(void)
{int a[] = {11,1, 6, 3, 66, 58, 79, 33};int len = sizeof(a) / sizeof(a[0]);int j;for (j=0; j<len; ++j){}
}

👸小媛:sizeof 是啥意思?

🐰小C:其實在之前我們編寫代碼時,在循環數組值時需要直接寫名循環多少次,其實太麻煩了。我們有一個函數叫做 sizeof (a) 可以獲取這個數組的有多長。

👸小媛:多長是什么意思?

🐰小C:其實我們的數據類型不同,我們的數據所占據的內存大小也不一樣;你可以理解成有些人高大,有些人矮小,他們坐板凳所需要的大小也不一樣。

👸小媛:懂了,你意思就是說多長就是他們總共占了多少個板凳,然后 sizeof(a[0]) 就表示每個數據有多長?他們之間相除就得到了多少個數據? 😂

🐰小C:是的,sizeof (a) 可以知道這個數組多長,只需要傳入數組變量名到 sizeof 函數中就可以了,而 sizeof(a[0]) 中的 a[0] 是第一個元素,我們這樣就知道了一個有多長,就可以得到有多少個值了。

👸小媛:原來如此,懂了。

🐰小C:接下來就直接循環時小于 len 這個變量就好了。

👸小媛:那之后怎么做呢?這一步理解了。

🐰小C:我們在 for 循環中加入這個代碼。

for (j=0; j<n; ++j){if (a[j] > a[j+1]){}
}

👸小媛:這又是啥意思?

🐰小C:你想一下 a[j] 是不是取到一個元素?然后 a[j+1] 是不是取到 a[j] 的下一個元素?

👸小媛:你意思是如果此時 j 是0,那么就取到 a[0] 和 a[1]? 😂

🐰小C:是的,使用 if 就判斷 a[j] 是否大于它的下一位,如果大于接下來你說要做啥?

👸小媛:交換位置!

🐰小C:是的,你看下面代碼?

for (j=0; j<n; ++j){if (a[j] > a[j+1]){buf = a[j];a[j] = a[j+1];a[j+1] = buf;}
}

👸小媛:咦?你是將 a[j] 當前值賦值給了一個變量 buf,然后又把 a[j] 的下一個元素賦值給了當前的 a[j],接著把 buf 也就是 a[j] 的值復制給了下一個元素,就這樣實現了交換? 😰

🐰小C:是的。

👸小媛:我懂了,你使用 buf 先存儲 a[j] 的變量是因為如果直接將下一個值給 a[j] 此時就找不到 a[j] 的值了。

🐰小C:對的,你理解了就好,此時我們輸出看一下,這一部分的完整代碼如下。

# include <stdio.h>
int main(void)
{int a[] = {11,1, 6, 3, 66, 58, 79, 33};int n = sizeof(a) / sizeof(a[0]);int j,buf;for (j=0; j<n; ++j){if (a[j] > a[j+1]){buf = a[j];a[j] = a[j+1];a[j+1] = buf;}}for(j=0; j<n; j++){printf("%d ",a[j]);}
}

👸小媛:你最后的那個循環就是現實排序后的結果吧,問題不大,結果出來了,最大的放最右邊了。

🐰小C:哈哈哈,那么最后一步就是就是進行多幾輪對比大小了。你說要進行幾輪?

👸小媛:多少個人比就是多少輪咯。 😰

🐰小C:那就在外面再加一個循環就好了,讓條件小于數組長度,這樣就可以讓每個人都有比試過了。代碼如下。

for (i=0; i<n; i++){for (j=0; j<n; j++){if (a[j] > a[j+1]){buf = a[j];a[j] = a[j+1];a[j+1] = buf;}}
}

👸小媛:可是這樣我發現一個問題,這樣不就最開始選出來的最大的值也要進行對比了?可是它肯定最大了呀?都選出來了。 😥

🐰小C:哈哈哈,所以我們還要改動一下。我們執行內循環1次是不是就會選出當前最強的一個?

👸小媛:是的。

🐰小C:在第二次循環的時候,由于第一次已經選出了最強的,是不是就會出現第二強的?他與最強的不用交換位置?

👸小媛:嗯。

🐰小C:那你想想,那我在第二次循環的時候就少執行一次不就好了,第二次的時候就少執行兩次不就好了?

👸小媛:那我該怎么做?

🐰小C:外循環第一次循環的時候 i 是不是 0?第二次是不是 1?那我們是不是可以在內部循環的條件 for (j=0; j<n; j++) 改成 for (j=0; j<n-i; j++) 不就好了?

👸小媛:唔,很有道理。我寫出出來了,是不是下面這樣。

# include <stdio.h>
int main(void)
{int a[] = {11,1, 6, 3, 66, 58, 79, 33};int n = sizeof(a) / sizeof(a[0]);int j,buf,i;for (i=0; i<n; i++){for (j=0; j<n-i; j++){if (a[j] > a[j+1]){buf = a[j];a[j] = a[j+1];a[j+1] = buf;}}}for(j=0; j<n; j++){printf("%d ",a[j]);}
}

🐰小C:可以的,我們等下繼續。

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

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

相關文章

ArcGIS 10.7如何獲取矢量多邊形所有折點的坐標(平面坐標和經緯度坐標)?

Descriptions:As shown in the figure below is a surface pattern spot, how to obtain the coordinates of each vertex (plane coordinates and latitude and longitude coordinates)? The results we want are as follows: Via data source,we get the information that…

Mahout分類算法學習之實現Naive Bayes分類示例

1.簡介 (1) 貝葉斯分類器的分類原理發源于古典概率理論&#xff0c;是通過某對象的先驗概率&#xff0c;利用貝葉斯公式計算出其后驗概率&#xff0c;即該對象屬于某一類的概率&#xff0c;選擇具有最大后驗概率的類作為該對象所屬的類。樸素貝葉斯分類器(Naive Bayes Classifi…

linux重新做yum,Linux 系統 Centos 7.7 下重裝yum

0. 背景不小心誤刪除yum后&#xff0c;開始想辦法重新安裝。1. 重裝 yum1.1 步驟需要下面4個包&#xff0c;我們需要下載到它們yum-metadata-parserpython-iniparseyum-plugin-fastestmirroryum-3.4.3下載后&#xff0c;安裝它們。1.2 去哪里下載&#xff1f;當然&#xff0c;搜…

jenkins2 groovy語法

文章來自&#xff1a;http://www.ciandcd.com文中的代碼來自可以從github下載&#xff1a; https://github.com/ciandcd安裝&#xff1a;wget https://dl.bintray.com/groovy/maven/apache-groovy-binary-2.4.7.zipunzip apache-groovy-binary-2.4.7.zipsudo ln -s /home/osbox…

Android之glide加載圖片圓角效果

1 問題 Android加載圖片需要圓角化,有什么簡單粗暴的方法嗎?當然有,用我們的神器glide 2 解決辦法 1)簡單辦法 ImageView imageView = (ImageView)helper.getView(R.id.keepHomeAppImageview);Glide.with(mContext).asBitmap().load(iconUrl) // .ov…

一維條形碼***技術(Badbarcode)

【轉】http://future-sec.com/badbarcode.html 前言在日常生活中&#xff0c;條形碼隨處可見&#xff0c;特別在超市&#xff0c;便利店&#xff0c;物流業&#xff0c;但你們掃的條形碼真的安全嗎&#xff1f;之前TK教主在PacSec介紹的條形碼攻擊和twitter上的demo視頻太炫酷&…

ArcGIS 10.7 模型構建器Model Builder空間建模流程化作業案例----影像拼接與掩膜裁剪

Model Builder(模型構建器)是一個用來創建、編輯和管理空間分析模型的應用程序,是一種可視化的編程環境,通過對現有工具的組合完成新模型或軟件的制作,為設計和實現空間處理模型(包括工具、腳本和數據)提供了一個圖形化的模型框架。 本文以影像數據的拼接和掩膜裁剪為例…

《看聊天記錄都學不會C語言?太菜了吧》(22)(必懂!題解 1-100 內素數)素數原來是質數!為什么你不早說!

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我&#xff0c;若你是真心學習可以送你書籍&#xff0c;指導你學習&#xff0c;給予你目標方向的學習路線&#xff0c;無套路&#xff0c;博客為證。 本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋…

Hello Playwright:(4)自動化測試

利用 Playwright 提供的 API&#xff0c;我們在瀏覽器上做的很多事情都可以自動化。例如&#xff0c;搜索數據、填寫表單和下載文件等等。但最適合的工作&#xff0c;就是自動化測試 Web 應用程序。自動化測試測試是軟件開發中的一項基本任務&#xff0c;至少&#xff0c;你需要…

通才和專家:如何選擇

原文&#xff1a;Generalists and specialists: thoughts on hiring作者&#xff1a;Nicholas C. Zakas 我的職業生涯經歷過各種規模的公司&#xff0c;從非常小的五人創業團隊到 13000 人的大公司雅虎&#xff0c;再到約 1000 人規模的 Box&#xff08;我目前所在&#xff09;…

Android之解決NestedScrollView嵌套ViewPager導致出現左右頁面滑動沖突

1 問題 NestedScrollView里面嵌勒ViewPagerTabLayout&#xff0c;導致在這個頁面監聽不到左右頁面滑動&#xff0c;需要解決這個監聽滑動問題。 2 解決辦法 val nestedScrollView: NestedScrollView mainView!!.findViewById(R.id.nestedScrollView)nestedScrollView.isFillV…

linux和裸機的區別,操作系統與裸機的區別

我們在學習stm32到一定階段可能會了解操作系統&#xff0c;然后便有這種問題產生&#xff0c;下面我就來粗略說說“操作系統與裸機的區別&#xff0c;以及stm32能運行什么操作系統&#xff0c;能運行linux系統嗎”等問題。操作系統與裸機的區別裸機運行的程序代碼&#xff0c;一…

ArcGIS 10.7拆分多部件要素(Multipart Features)至單部件要素的兩種方法

GIS中經常會出現多部件要素的現象,為了便于檢查拓撲等關系,需要將其拆分為單個的部件。例如,在用同一個圖層的多個圖斑去裁剪(Clip)時,或者將多個不相鄰的圖斑進行合并(merge)時,可能會產生多部件要素,本文演示ArcGIS10.7版本中常見的兩種拆分多部件要素至單部件要素…

spring-session + redis 實現集群 session 共享

2019獨角獸企業重金招聘Python工程師標準>>> 目前市面上實現session共享的方案有很多&#xff0c;其中比較常用的是使用Tomcat、Jetty等web服務器提供的session共享功能&#xff0c;以此將session內容統一存放在數據庫&#xff08;如mysql&#xff09;或者緩存&…

第三方的使用

1. MMDrawerController 抽屜效果 2.SVProgressHUD 透明指示層 3.SDCycleScrollView 無限輪播器 4.SDWebImage 異步圖片加載 5.RESideMenu 抽屜效果 6.AFNetworking 網絡請求 7.MJRefresh tableView上下拉刷新 8.MJExtension json轉模型 9.Masonry 布局適配框架 10.UMengSocia…

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(10)無底洞的循環

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

業務流水號規則生成組件

對于很多業務系統都需要生成業務流水號&#xff0c;如果訂單號、購采單號等等&#xff1b;而這些業務流水號并不是簡單的一個增長數值&#xff0c;它們很多時候都有一些不同的規則來定義&#xff0c;如不同類型的字母或地區拼音簡寫等。為了更靈活生成這些有規則的業務流水號Be…

Android之奔潰提示com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap

1 問題 Android端獲取服務端的數據然后我直接把數據轉hashMap提示錯誤如下&#xff0c; com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap 2 解決辦法 直接轉Map集合即可 (t.data as Map<String, String>).forEach({if (KEEP_NAME.equals…

ArcGIS中國工具(ArcGISCTools)3.2 安裝教程(附安裝包下載)

ArcGIS中國工具,簡稱CTools,集成在ArcGIS 10.x系列版本中。本文在ArcGIS10.7的基礎之上,演示3.2版本安裝過程,并提供下載地址共大家學習和交流。 一、安裝過程

函數式編程工具:filter和reduce

# -*- coding: utf-8 -*- #python 27 #xiaodeng #函數式編程工具&#xff1a;filter和reduce#python內置函數中&#xff0c;map函數是用來進行函數式編程這類工具最簡單的內置函數代數#函數式編程含義&#xff1a; #一種編程范式&#xff0c;也就是如何編寫程序的方法論&#x…