網(wǎng)站首頁 編程語言 正文
?一.冒泡排序
1.概念
冒泡排序這種排序方法其實關(guān)鍵詞就在于冒泡兩個字,顧名思義就是數(shù)字不斷比較然后最大的突出來,也就是說把相鄰的兩個數(shù)字兩兩比較,當(dāng)一個數(shù)字大于右側(cè)相鄰的數(shù)字時,交換他們的位置,當(dāng)一個數(shù)字和他右側(cè)的數(shù)字小于或等于的時候,不交換。
?2.圖解
關(guān)于冒泡排序我自己畫了一幅圖來描述他的一輪過程
這里我舉了五個無序的數(shù){7,3,6,5,4}
?由此可看出他不斷與右側(cè)相鄰的數(shù)字進(jìn)行比較,當(dāng)他大于右邊的數(shù)字就交換,否則不交換,就用這種方法不斷進(jìn)行排序進(jìn)行很多輪,最后得出一個有序的序列{2,4,5,6,7}。
3.代碼的思路
冒泡循環(huán)是一種有序的序列,有上圖我們不難看出冒泡循環(huán)一輪需要進(jìn)n-1次比較然后開啟下一層,而且你一輪比較完了之后最后一個最大的數(shù)就不用再參與比較循環(huán)了,所以下一次的循環(huán)可以減少一次。
因此我的思路是利用兩次for循環(huán),一次循環(huán)來當(dāng)取第二次循環(huán)的次數(shù),然后依次減少第二次for循環(huán)的次數(shù),簡便了很多過程,然后數(shù)組兩個相鄰的數(shù)字進(jìn)行依次比較,大于右邊的也就是大于下一位的交換位置,否則不交換,所以我的兩個for循環(huán)的代碼如下(其實這也算是個萬能代碼,就冒泡循環(huán)這一塊)當(dāng)然i,k,b都需要來定義的,n為比較序列中元素個數(shù)。
這個代碼也用了兩次for循環(huán)所以我們不難推算出時間復(fù)雜度為o(n^2)
for(i=0;i<n-1;i++) { for(k=0;k<n-1-i;k++) { if(a[k]>a[k+1]) { b=a[k]; a[k]=a[k+1]; a[k+1]=b; }//交換a[k]與a[k+1]位置 } }
4.代碼例子
我自己也寫了一個代碼,輸入a[10]序列的數(shù)字,然后冒泡循環(huán)進(jìn)行排序來實現(xiàn)
#include<stdio.h> int main() { int a[10], i, j, b, k; for (i = 0; i < 10;i++) { printf("輸入第%d個數(shù)為:", i+1); scanf_s("%d", &a[i]); } for (k = 0; k < 9; k++)//外部循環(huán) for (i = 0; i < 9 - k; i++)//內(nèi)部循環(huán) if(a[i] > a[i + 1])// { b = a[i]; a[i]= a[i + 1]; a[i + 1] = b; } printf("排出序列為:"); for(i = 0; i < 10; i++) printf("%d ", a[i]); return 0; }
最后運行也是成功的
?二.選擇排序
1.概念
選擇循環(huán)的主要是選擇,選擇一個元素去進(jìn)行比較,假如這個數(shù)比他小,換成嘞個數(shù)繼續(xù)比較,最后找出最小值與數(shù)組第一位的數(shù)進(jìn)行交換。然后一直這樣循環(huán)下去,直到代碼排序完成。也就是通過一個中間量從帶排序的的數(shù)中找出最大或最小的交換到對應(yīng)位置。
2.圖解
關(guān)于選擇排序我自己花了一幅圖來描述他的一輪比較
我用了五個無序數(shù)來做例子{2,1,4,-3,3}
?由此可以看出選擇比較的過程,這里我用指針代指了需要的中間量,剛開始指針指向2,然后2去比較,1<2,所以指針指向較小值,指針指向1,最后就這樣找出-3為最小值和第一個交換,得到第一輪循環(huán)比較的數(shù)列{-3,1,4,2,3}。
3.代碼的思路
其實觀察上圖一輪循環(huán)次數(shù)還有循環(huán)完一輪之后,不需要用最小值比較可以看出其實他和冒泡循環(huán)有點相似,都是循環(huán)一輪需要進(jìn)n-1次比較然后開啟下一層,而且下一次循環(huán)可以減少一次。
所以我的思路是,依然運用兩次for循環(huán),與冒泡循環(huán)不同的是我需要一個中間商,所以我可以引用一個局部變量來幫助我,這個局部變量就是圖解的指針,局部變量就是數(shù)組對應(yīng)元素的位置,不斷進(jìn)行比較,當(dāng)他小于一個數(shù)時,他就等于嘞個數(shù)的位置數(shù),繼續(xù)比較,直到循環(huán)結(jié)束找出最小值,最小值跟第一位換位置,一次循環(huán)直到排出有序序列為止。所以代碼如下
for(i=o;i<n-1:i++)//循環(huán)數(shù)列取得數(shù)開始依次比較 { int x=i;//x為中間商 for(k=i+1;k<n;k++)//從循環(huán)數(shù)列取得數(shù)后一位開始循環(huán)數(shù)列取得數(shù)進(jìn)行依次比較 { if(a[x]>a[k])//得出最小值 k=x; if(x!=i)//將得到的最小值跟最前面的數(shù)字進(jìn)行交換 { t=a[i]; a[i]=a[x]; a[x]=t; } } }
這也是一個萬能代碼可以用在選擇序列上。
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_64448174/article/details/122094220
相關(guān)推薦
- 2022-08-26 ios使用NSProxy實現(xiàn)消息轉(zhuǎn)發(fā)_IOS
- 2023-01-06 Flutter?Recovering?Stream?Errors小技巧_Android
- 2023-04-08 python如何實現(xiàn)數(shù)組反轉(zhuǎn)_python
- 2022-04-06 遠(yuǎn)程過程調(diào)用RPC基本概念及實現(xiàn)原理_其它綜合
- 2022-11-27 Python?Django教程之實現(xiàn)待辦事項應(yīng)用程序_python
- 2022-07-31 C語言編程基礎(chǔ)char類型轉(zhuǎn)換示例_C 語言
- 2022-02-03 checkbox修改默認(rèn)樣式
- 2022-05-03 如何利用Python實現(xiàn)簡易的音頻播放器_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支