C語言 冒泡排序

目錄

一、原理

二、代碼演示

三、代碼優化


一、原理

假設:

int arr[] = { 9,8,7,6,5,4,3,2,1,0 };

將 arr 內的元素進行升序排列,得到一個新的數組

int arr[] = { 0,1,2,3,4,5,6,7,8,9 };

這個過程中,我們可以使用冒泡排序。

?如上圖所示,冒泡排序便是數組元素之間進行倆倆交換,類似于之前比大小中的打擂臺,設立一個擂主進行打擂,完成條件進行交換便是打擂成功,直到最后抵達它應該所在的位置便是結束打擂。

此時開始設立第二個擂主進行打擂,而且新設立的擂主不能打上一任的擂主和之前的擂主,且上一任的擂主必須保持原地不動,而打一次通關,則需要看需要打敗的人數,以及之前的擂主和上一任擂主。

以此類推,得到最后的結果。

且最后,每一任擂主需要進行的打擂次數便是交換次數,有幾個擂主便是需要進行幾趟的冒泡排序。

最后我們便得到以下代碼。

二、代碼演示

int dio(int arr[], int sz)
{int i = 0; for (i = 0; i < sz; i++){//需要進行一趟冒泡排序int j = 0;for (j = 0; j < sz - 1 - i; j++)//之前的擂主不動,且不能和上之前的擂主進行決斗//且前幾任擂主和冒泡排序的趟數有關{if (arr[j] > arr[j + 1])//達成條件后進行交換{//經典的交換代碼int temp = arr[j + 1];arr[j + 1] = arr[j];arr[j] = temp;}}}
}
void print(int *arr, int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ",arr[i]);}
}
int main()
{int arr[] = {1,3,5,2,8,7,9,6,4,0,10, };int sz = sizeof(arr) / sizeof(arr[0]);dio(arr,sz);//調用函數進行冒泡排序print(arr, sz);//打印冒泡排序后的數組return 0;
}

三、代碼優化

以上的代碼有個缺點,那便是遇見了顯而易見的,只需要極少的交換次數便能夠完成的排序時,也需要進行多趟的冒泡排序,需要每一個元素都進行比較和排序,這導致效率極其的低下,所以我們在此多添加一個內容。

int arr[] = {9,1,2,3,4,5,6,7,8,10 };

那便是一個假設,若滿足了交換的內容,則假設失效,若沒有滿足,則假設成功。

int dio(int arr[], int sz)
{int i = 0; int flag = 1;//進行假設,假設有序for (i = 0; i < sz; i++){//需要進行一趟冒泡排序int j = 0;for (j = 0; j < sz - 1 - i; j++)//上一任的擂主不動,且不能和上一任擂主進行決斗{if (arr[j] > arr[j + 1])//達成條件后進行交換{//經典的交換代碼int temp = arr[j + 1];arr[j + 1] = arr[j];arr[j] = temp;flag = 0;//假設失敗}}if (flag == 1){break;}}
}
void print(int *arr, int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ",arr[i]);}
}
int main()
{int arr[] = {1,3,5,2,8,7,9,6,4,0,10, };int sz = sizeof(arr) / sizeof(arr[0]);dio(arr,sz);//調用函數進行冒泡排序print(arr, sz);//打印冒泡排序后的數組return 0;
}

?

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

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

相關文章

windows docker mysql8.0 掛載配置文件不生效的問題

原因 mysql 8.0 遇到sql_modeonly_full_group_by的問題&#xff0c;于是就自定義my.cnf 去掉only_full_group_by&#xff0c;修改my.cnf 文件后&#xff0c;進行映射啟動 docker run 命令 docker run -p 3306:3306 --privilegedtrue --restartalways -d --name axsc-mysql -…

【0814作業】多線程并發服務器

1) 代碼 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> #include <string.h> #include <stdlib.h> #include <signal.h> #include <sys/wait.h> #include <netinet/in.h>…

配置文件優先級解讀

目錄 概述 同級目錄application配置文件優先級 application 以及bootstrap 優先級 不同級目錄配置文件優先級 外部配置加載順序 概述 SpringBoot除了支持properties格式的配置文件&#xff0c;還支持另外兩種格式的配置文件。三種配置文件格式分別如下: properties格式…

Python學習筆記_基礎篇(二)_數據類型之字符串

一.基本數據類型 整數&#xff1a;int 字符串&#xff1a;str(注&#xff1a;\t等于一個tab鍵) 布爾值&#xff1a; bool 列表&#xff1a;list 列表用[] 元祖&#xff1a;tuple 元祖用&#xff08;&#xff09; 字典&#xff1a;dict 注&#xff1a;所有的數據類型都存在想對應…

TFTP Server

簡介 TFTP&#xff08;Trivial File Transfer Protocol,簡單文件傳輸協議&#xff09;是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議&#xff0c;提供不復雜、開銷不大的文件傳輸服務。端口號為69。 TFTP和FTP的區別 安全性區別 FTP支持登錄安全&…

ATF(TF-A)安全通告 TFV-9 (CVE-2022-23960)

ATF(TF-A)安全通告匯總 目錄 一、ATF(TF-A)安全通告 TFV-9 (CVE-2022-23960) 二、CVE-2022-23960 一、ATF(TF-A)安全通告 TFV-9 (CVE-2022-23960) Title TF-A披露通過分支預測目標重用&#xff08;branch prediction target reuse&#xff09;引發的前瞻執行處理器漏洞 CV…

Softmax Strategy

1. epsilon-greedy strategy 11111 2. UCB strategy 222 3. Softmax strategy 333 4. Gradient strategy 444 References [1] 科學網—【RL系列】Multi-Armed Bandit筆記——Softmax選擇策略 - 管金昱的博文 [2] The Epsilon-Greedy Algorithm | James D. McCaffrey

【軟考】2023系統架構設計師考試

目錄 1 軟考資格設置 2 考試報名 3 考試準備 4 參加考試 5 考試感受 6 其他 1 軟考資格設置 2 考試報名 報名網址&#xff1a;https://www.ruankao.org.cn/ 3 考試準備 4 參加考試 2023年下半年系統架構設計師考試時間為11月4、5日。 5 考試感受 6 其他 最近好像有地區…

vue element 多圖片組合預覽

定義組件&#xff1a;preview-image <template><div><div class"imgbox"><divclass"preview-img":class"boxClass"v-if"Imageslist 3 ||Imageslist 5 ||Imageslist 7 ||Imageslist 8 ||Imageslist > 9"&…

LangChain手記 Models,Prompts and Parsers

整理并翻譯自DeepLearning.AILangChain的官方課程&#xff1a;Models,Prompts and Parsers 模型&#xff0c;提示詞和解析器&#xff08;Models, Prompts and Parsers&#xff09; 模型&#xff1a;大語言模型提示詞&#xff1a;構建傳遞給模型的輸入的方式解析器&#xff1a;…

即時編譯的觸發

文章目錄 Java即時編譯:概述Java即時編譯:原理Java即時編譯:優點提高程序的運行效率動態優化高效利用CPU資源Java即時編譯:案例分析Java即時編譯:概述 Java語言一直是業界公認的高級編程語言,在眾多編程語言中獨樹一幟。Java的JVM(Java虛擬機)是Java語言的核心所在,它…

即將發布的 Kibana 版本可運行 Node.js 18

作者&#xff1a;Thomas Watson Kibana 構建在 Node.js 框架之上。 為了確保每個 Kibana 版本的穩定性和使用壽命&#xff0c;我們始終將捆綁的 Node.js 二進制文件保持為最新的最新長期支持 (LTS) 版本。 當 Node.js 版本 18 升級到 LTS 時&#xff0c;我們開始將 Kibana 升級…

如何理解“對矩陣進行初等行變換不改變其列向量的線性關系”?

對矩陣A進行初等行變換相當于左乘一個可逆矩陣P。 把A看作是列向量組&#xff0c;若有Ax0&#xff0c;則其中的x就說明了列向量的線性關系&#xff1a; [ α 1 , α 2 , α 3 ] [ x 1 x 2 x 3 ] [ 0 ] \left[ \alpha_1 ,\alpha_2, \alpha_3 \right] \begin{bmatrix} x_1\\ x…

【爬蟲】爬取旅行評論和評分

以馬蜂窩“普達措國家公園”為例&#xff0c;其評論高達3000多條&#xff0c;但這3000多條并非是完全向用戶展示的&#xff0c;向用戶展示的只有5頁&#xff0c;數了一下每頁15條評論&#xff0c;也就是75條評論&#xff0c;有點太少了吧&#xff01; 因此想了個辦法盡可能多爬…

【 BERTopic應用 02/3】 分析卡塔爾世界杯推特數據

攝影&#xff1a;Fauzan Saari on Unsplash 一、說明 這是我們對世界杯推特數據分析的第3部分&#xff0c;我們放棄了。我們將對我們的數據進行情緒分析&#xff0c;以了解人們對卡塔爾世界杯的感受。我將在這里介紹的一個功能強大的工具包是Hugging Face&#xff0c;您可以在…

高憶管理:策略:短期利空落地 市場有望企穩回升

高憶管理指出&#xff0c;基于A股商場出資環境分析&#xff0c;尤其是當時商場存量博弈為主的布景下&#xff0c;主張重視以下“21”主線輪動&#xff1a;&#xff08;1&#xff09;國產科技代替立異&#xff1a;電子&#xff08;半導體、消費電子&#xff09;、通信&#xff0…

Vue基本知識

一、vue入門 Vue為前端的框架&#xff0c;免除了原生js的DOM操作。簡化書寫。 基于MVVM的思想&#xff0c;實現數據的雙向綁定&#xff0c;使編程的重點放在數據上。 1、引入vue.js文件 2、定義vue核心對象&#xff0c;定義數據模型 3、編寫視圖 //1、引入vue.js <scr…

關于vue,記錄一次修飾符.stop和.once的使用,以及猜想。

內置指令 | Vue.js 在vue的api里&#xff0c;關于v-on有stop和once兩個事件標簽。 .stop - 調用 event.stopPropagation()。.once - 最多觸發一次處理函數。 原有主要代碼和頁面效果 &#xff08;無stop和once&#xff09;: ...<div class"div" click"di…

激活函數總結(九):Softmax系列激活函數補充(Softmin、Softmax2d、Logsoftmax)

激活函數總結&#xff08;九&#xff09;&#xff1a;Softmax系列激活函數補充 1 引言2 激活函數2.1 Softmin激活函數2.2 Softmax2d激活函數2.3 Logsoftmax激活函數 3. 總結 1 引言 在前面的文章中已經介紹了介紹了一系列激活函數 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、S…

React+Typescript清理項目環境

上文 創建一個 ReactTypescript 項目 我們創建出了一個 React配合Ts開發的項目環境 那么 本文 我們先將環境清理感覺 方便后續開發 我們先來聊一下React的一個目錄結構 跟我們之前開發的React項目還是有一些區別 public 主要是存放一些靜態資源文件 例如 html 圖片 icon之類的 …