網站首頁 編程語言 正文
前言
在排序中,有各種各樣的排序方式,今天我們將要來介紹《冒泡排序》。今天會從冒泡排序的具體意義和他的操作來展開。
一、冒泡排序是什么
從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的一個或最小的一個。這個數就會從序列的最右邊冒出來。
以從小到大排序為例,第一輪比較后,所有數中最大的那個數就會浮到最右邊;第二輪比較后,所有數中第二大的那個數就會浮到倒數第二個位置……就這樣一輪一輪地比較,最后實現從小到大排序。
二、具體步驟
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-11-09 PostgreSQL?HOT與PHOT有哪些區別_PostgreSQL
- 2022-08-01 Win?Server2016遠程桌面如何允許多用戶同時登錄_win服務器
- 2023-03-29 基于WPF實現多選下拉控件的示例代碼_C#教程
- 2022-04-19 Python之random庫的常用函數有哪些_python
- 2023-01-10 Oracle如何獲取數據庫系統的當前時間_oracle
- 2022-04-01 k8s報錯:Error response from daemon: pull access deni
- 2022-07-30 .NetCore使用過濾器實現登錄權限認證的方法小結_實用技巧
- 2023-02-17 Python?樹表查找(二叉排序樹、平衡二叉樹)_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同步修改后的遠程分支