網站首頁 編程語言 正文
前言
在排序中,有各種各樣的排序方式,今天我們將要來介紹《冒泡排序》。今天會從冒泡排序的具體意義和他的操作來展開。
一、冒泡排序是什么
從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的一個或最小的一個。這個數就會從序列的最右邊冒出來。
以從小到大排序為例,第一輪比較后,所有數中最大的那個數就會浮到最右邊;第二輪比較后,所有數中第二大的那個數就會浮到倒數第二個位置……就這樣一輪一輪地比較,最后實現從小到大排序。
二、具體步驟
1.代碼解釋
代碼如下(示例):
#include<stdio.h>
void bubble(int arr[], int sz)
{
for (int j = 0; j < sz - 1; j++) //一趟排n-1次(n為n個數)
//n個數的話,就要走n-1趟(每一趟排完以后,都
//要減去最后一個排好的數)
{
int flag = 0;
for (int i = 0; i < sz-1-j; i++)
{
if (arr[i] <arr[i + 1])
{
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
flag = 1;
}
}
if (flag == 0)
{
break;
}
}
}
int main()
{
int arr[] = { 要排序的元素 };
int sz = sizeof(arr) / sizeof(arr[0]); // sz為數組元素個數。
bubble(arr,sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
?舉例詳細說明:
同理可得,每一趟以后減去一個元素,則每趟需要減去一次次數。
所以for循環中,需要i<sz-1-j.
?當遇到規范的數組元素時(不需要排序),int flag =0初始為零,若需要排序,則進入?if (arr[i] <arr[i + 1])循環中,則flag變為1;若一趟過完之后,發現并未交換元素,則flag=0未變,直接跳出循環,減少了時間復雜度。
2.讀入數據
代碼如下(示例)
#include<stdio.h>
void bubble(int arr[], int sz)
{
for (int j = 0; j < sz - 1; j++) //一趟排n-1次(n為n個數)
//n個數的話,就要走n-1趟(每一趟排完以后,都
//要減去最后一個排好的數)
{
int flag = 0;
for (int i = 0; i < sz-1-j; i++)
{
if (arr[i] <arr[i + 1])
{
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
flag = 1;
}
}
if (flag == 0)
{
break;
}
}
}
int main()
{
int arr[] = { 1,3,54,76,7,5,45,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble(arr,sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
那么可以看出,輸出的結果就是?
76,54,45,9,7,5,3,1
總結
這里對文章進行總結:
從大到小,和從小打大至于要改變if (arr[i] <arr[i + 1])中符號即可。
注意:在調用函數時,在函數內部無法算出sz,即數組的元素個數,所以需在主函數中算出后,再傳入函數形參中!!
原文鏈接:https://blog.csdn.net/ChaoFreeandeasy_/article/details/123562437
相關推薦
- 2022-12-07 【Chrome】瀏覽器控制臺設置成中文
- 2022-05-07 MVC中Action方法的返回類型介紹_基礎應用
- 2022-11-22 Python可視化繪制圖表的教程詳解_python
- 2022-10-02 Python?Ruby?等語言棄用自增運算符原因剖析_python
- 2022-10-14 Sklearn中的二分類模型可以進行多分類的原理
- 2022-11-17 python數學模塊(math/decimal模塊)_python
- 2022-07-11 lambda表達式和Stream
- 2022-05-22 Python學習之os包使用教程詳解_python
- 最近更新
-
- 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同步修改后的遠程分支