c語言-冒泡排序

冒泡排序原理:
冒泡排序是一種簡單直觀的排序算法,它重復地遍歷待排序的元素序列,比較相鄰的兩個元素,如果它們的順序不符合要求(例如升序要求前面的元素小于后面的元素),則交換它們的位置。遍歷整個序列的過程會多次進行,每一輪都會把一個最大(或最小,取決于排序順序)的元素“浮”到最右側。

具體過程如下:

  1. 比較相鄰元素: 從第一個元素開始,比較相鄰的兩個元素的大小。

  2. 交換元素位置: 如果順序不符合要求(例如升序時前面的元素大于后面的元素),則交換它們的位置。

  3. 一輪結束: 一輪比較和交換之后,最大的元素已經被“浮”到最右側。

  4. 重復步驟1-3: 重復執行上述步驟,每次都會確定一個未排序部分的最大元素的位置。

  5. 終止條件: 當整個序列都有序時,排序完成。

冒泡排序的特點:

  • 穩定性: 冒泡排序是穩定的排序算法相等元素的相對位置在排序前后不會改變。

  • 時間復雜度: 最壞情況下的時間復雜度為 O(n^2)最好情況下的時間復雜度為 O(n)。

  • 空間復雜度: 冒泡排序僅需要常數級的額外空間。

盡管冒泡排序的性能相對較差,但由于其簡單易懂的特點,適用于對數據量較小的序列進行排序。在實際應用中,對于大規模數據集,通常會選擇更高效的排序算法,如快速排序或歸并排序。

用c語言進行冒泡排序時,遇到的問題:

下面是時隔很久用c寫出的代碼:(錯誤的)

#include<stdio.h>
int main(){	int arr[]={2,1,5,6,3,4};for(int i=0;i<n-1;i++){for(int j=0;j<n-1-i;j++){if(arr[j]>arr[j+1]){arr[j]=arr[j+1];}}}print("輸出序列:",arr[j]); 
}   

代碼存在以下幾點錯誤:

  1. 沒有定義變量 n,我假設 n 是數組的長度,因此在代碼中添加了 int n = sizeof(arr) / sizeof(arr[0]);

  2. 在冒泡排序中,當發現 arr[j] > arr[j+1] 時,應該交換它們的值,而不是將 arr[j] 賦值為 arr[j+1]。因此,我修改了相應的代碼。

  3. printf 函數中,應該使用小寫的 printf,而不是 print

修改后的代碼如下:

#include<stdio.h>int main() {int arr[] = {2, 1, 5, 6, 3, 4};int n = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - 1-i; j++) {if (arr[j] > arr[j+1]) {// 交換 arr[j] 和 arr[j+1] 的值int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}printf("輸出序列:");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;
}

在標準的冒泡排序算法中內層循環的終止條件通常是 n - 1 - i其中 i 是外層循環的當前迭代次數。這是因為在每一輪外層循環之后,數組的最后 i 個元素已經被確定為最大的 i 個元素,所以內層循環無需再遍歷這些已經確定位置的元素。

這樣的代碼應該能夠正確地對數組進行冒泡排序,并輸出排序后的序列。

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

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

相關文章

國家開放大學平時作業 練習題

試卷代號&#xff1a;1377 理工英語3 參考試題 一、交際用語&#xff08;共計10分&#xff0c;每小題2分&#xff09; 1-5題&#xff1a;選擇正確的語句完成下列對話&#xff0c;并將答案序號寫在答題紙上。 1.-1 won the first prize in todays speech contest. - …

R語言——圖解taxize,強烈推薦收藏關注,持續更新中

圖解taxize 1. taxize分解思路1.1 圖解說明 2. 針對不同數據庫的函數組2.1 APGⅢ2.2 BOLD&#xff08;barcode of life data system&#xff09; 1. taxize分解思路 taxize可以幫助人們從許多數據庫中獲取信息。 由于要處理的數據庫很多&#xff0c;導致taxize包含的功能函數…

基本鎖介紹

鎖 1、分類 樂觀鎖:在select的時候不會加鎖&#xff0c;是基于程序實現的&#xff0c;所以不會存在死鎖的情況。適用于讀多寫少的場景&#xff08;寫的并發量相對不高&#xff09;&#xff0c;可以提高系統的吞吐量。因為如果寫多的話&#xff0c;樂觀鎖會有很大機率更新失敗…

可持續創新 精選路線

在加速企業數字化轉型、 實現智能制造的升級之路上&#xff01; 使用好的工具固然重要&#xff0c; 而有好工具&#xff0c;也要會用工具。生信科技不僅為企業提供強大的產品支持&#xff0c; 更有全方位的定制化服務&#xff0c; 提升工程師的工具應用能力&#xff0c; 讓企業…

C++ Qt QFile用法介紹與代碼演示

作者:令狐掌門 技術交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目錄 打開和關閉文件讀取文件寫入文件示例代碼自定義格式文件解析在Qt 中 QFile 的類用于讀寫本地文件系統中的文件。它繼承自 QIODevice,所以它包含了許多用于數據輸入和輸出的功…

c++ 課程筆記

105課: cpp文件分為 .h .cpp .cpp 文件 110課:124課 深拷貝 淺拷貝 自建拷貝構造解決淺拷貝釋放new后堆區析構函數的問題 (淺拷貝 拷貝內存地址, 釋放堆區時 導致源數據 釋放時,該地址無數據?而報錯) 淺拷貝: 拷貝了對方的值和 堆區內存地址(刪除 影響原數據堆區) 深拷貝…

第二類曲線積分@對坐標的曲線積分

文章目錄 abstract對坐標的曲線積分變力沿曲線所做的功平均功(恒力做功)變力做工弧段微分第二類曲線積分的定義函數在曲線弧上連續推廣:空間曲線弧的第二類曲線積分常用形式和簡寫利用第二類曲線積分表示變力做功性質 計算方法證明對坐標 x x x對坐標 y y y相加積分限和曲線弧起…

文件批量重命名技巧:圖片文件名太長怎么辦?告別手動改名方法

在日常生活中&#xff0c;常常會遇到文件名過長導致的問題。尤其是在處理大量圖片文件時&#xff0c;過長的文件名可能會使得文件管理變得混亂不堪。現在來看下云炫文件管理器如何批量重命名&#xff0c;讓圖片文件名變得更簡潔&#xff0c;提高工作效率。 操作1、在云炫文件…

python運算符重載之字符串顯示和右側加法

1 python運算符重載之字符串顯示和右側加法 1.1 重載字符串顯示 1.1.1 str和repr python調用prin()t時&#xff0c;自動調用__str__和__repr__&#xff0c; python調用str()時&#xff0c;自動調用__str__和__repr__&#xff0c; python調用repr()時&#xff0c;自動調用_…

深入理解C語言指針基礎概念:定義、內存地址與聲明初始化

導言&#xff1a; 在C語言中&#xff0c;指針是一項強大而重要的概念&#xff0c;直接涉及內存的底層操作。理解指針的基礎概念對于熟練運用C語言以及理解底層系統工作原理至關重要。本文將深入研究指針的定義、內存地址的概念以及指針的聲明和初始化&#xff0c;幫助讀者建立對…

C++之unordered_map/set的使用

前面我們已經學習了STL中底層為紅黑樹結構的一系列關聯式容器——set/multiset 和 map/multimap(C98). unordered系列關聯式容器 在C98中, STL提供了底層為紅黑樹結構的一系列關聯式容器, 在查詢時效率可達到log2N,即最差情況下需要比較紅黑樹的高度次, 當樹中的節點非常多時,…

3 動態規劃解解碼問題

來源&#xff1a;LeetCode第91題 難度&#xff1a;中等 描述&#xff1a;一條包含字母A-Z的消息通過以下映射進行了編碼: A->1,B->2,z->26,要接嗎已編碼的消息&#xff0c;所有數字必須基于上述映射的方法&#xff0c;反向映射回字母(可能由多種方法)&#xff0c;例…

MindStudio學習一 整體介紹

一場景介紹 二 安裝介紹 1.LINUX 采用無昇騰硬件采用linux 分部署 2.WINDOWS 3.linux下安裝整體步驟 3.1安裝依賴 3.2 安裝步驟 1.gcc cmake 等依賴 2.python3.7.5 3.pip 安裝依賴 4.安裝JDK 5.安裝 Ascend-cann-toolkit 6.解壓安裝Mindstudio 7.進入bin路徑 ./…

MySQL where 子句

文章目錄 前言MySQL where 子句語法 從命令提示符中讀取數據使用PHP腳本讀取數據后言 前言 hello world歡迎來到前端的新世界 &#x1f61c;當前文章系列專欄&#xff1a;Mysql &#x1f431;?&#x1f453;博主在前端領域還有很多知識和技術需要掌握&#xff0c;正在不斷努力…

Javascript的form表單校驗輸入框

以下是HTML代碼&#xff1a; <form name"myForm" onsubmit"return validateForm()"><label for"name">姓名&#xff1a;</label><input type"text" id"name" name"name"><br><l…

【ArcGIS Pro微課1000例】0035:柵格影像拼接(dem高程數據)

本實驗講解在ArcGIS Pro中,柵格數據的兩種拼接(鑲嵌)方法,適用于遙感影像、DOM、DEM、DSM等常見柵格數據。 文章目錄 一、加載實驗數據二、柵格拼接工具1. 鑲嵌2. 鑲嵌至新柵格三、注意事項四、拓展閱讀一、加載實驗數據 加載配套實驗數據中的0035.rar中的兩個dem數據,如…

455.分發餅干

原題鏈接&#xff1a;455.分發餅干 思路&#xff1a; 先使用大餅干喂飽大胃口的&#xff0c;再到剩余的里面用大餅干喂剩下大胃口的 &#xff0c;直到全部滿足或者喂不了了為止。 全代碼&#xff1a; class Solution { public:int findContentChildren(vector<int>&am…

【從刪庫到跑路】MySQL數據庫 — E-R圖 | 關系模型

&#x1f38a;專欄【MySQL】 &#x1f354;喜歡的詩句&#xff1a;更喜岷山千里雪 三軍過后盡開顏。 &#x1f386;音樂分享【如愿】 大一同學小吉&#xff0c;歡迎并且感謝大家指出我的問題&#x1f970; 文章目錄 &#x1f339;簡述什么是E-R圖?核心概念 &#x1f339;E-R圖…

LeetCode40. Combination Sum II

文章目錄 一、題目二、題解 一、題目 Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target. Each number in candidates may only be used once in…

完美解決:Nginx訪問PHP出現File not found.

目錄 解決方法一&#xff1a; 解決方法二&#xff1a; 遇到 File not found. 出現的問題解決&#xff1a; 解決方法一&#xff1a; 修改nginx的主配置文件。 vi /etc/nginx/nginx.conf location ~ \.php$ { root html; fastcgi_pass …