【入門級-算法-6、排序算法:排序的基本概念冒泡排序】

一、排序概念:是將一組數據按照特定規則重新排列的過程,是計算機科學中最基礎且重要的算法之一。

二、排序的基本要素
排序鍵(Key):是排序過程中用于比較和確定元素順序的特定數據項或數據屬性。

穩定性:排序過程中,相等元素的相對位置是否保持不變
穩定排序:相等元素排序后相對位置不變
不穩定排序:相等元素排序后相對位置可能改變

排序方向:
升序排序(從小到大)
降序排序(從大到小)

時間復雜度:在計算機科學中,時間復雜性,又稱時間復雜度,算法的時間復雜度是一個函數,它定性描述該算法的運行時間。時間復雜度是衡量算法執行時間隨輸入規模增長而變化的度量標準,是算法分析的核心概念。

空間復雜度:空間復雜度(Space Complexity)是對一個算法在運行過程中臨時占用存儲空間大小的量度,通常用大O符號表示。

設計算法時,時間復雜度和空間復雜度往往存在權衡關系,優秀的算法設計需要在兩者之間找到平衡點,有兩種常用解決方法:一個是空間換時間,就是說使用額外存儲空間來減少計算時間;一個是時間換空間,就是說減少存儲空間但增加計算時間,在實際的開發過程中,要根據實際資源的情況進行調整。

三、排序算法分類
1、比較排序
冒泡排序
選擇排序
插入排序
希爾排序
歸并排序
快速排序
堆排序
2、非比較排序
計數排序
桶排序
基數排序

四、冒泡排序

  1. 冒泡排序 (Bubble Sort)
    原理:重復比較兩個相鄰的元素,將較大的元素逐步"冒泡"到數組末尾。

舉例說明:
將23、8、25、4、11按從小到大輸出。
第一趟排序
23 8 25 4 11 原數列
8 23 25 4 11 第一次
8 23 25 4 11 第二次
8 23 4 25 11 第三次
8 23 4 11 25 第四次,即比較結果(每一趟最后一次排序結束后,最大的數據“浮出水面”,即找到最大的數)
第二趟排序
8 23 4 11 原數列(此時已經確定25是最大的數,因此25就不再參與比較)
8 23 4 11 第一次
8 4 23 11 第二次
8 4 11 23 第三次,即比較結果

規律:如果有n個數進行排序,需要則進行n-1趟的比較,在第j趟中進行n-j次相鄰兩個數的比較。

根據上面的規律,代碼實現
main( )
{
int a[10];
int i,j,t;
printf(“input 10 number:\n”);
for (i=0; i<10; i++)
{
scanf(“%d”,&a[i]);
}
printf(“\n”);
for(j=1;j<10;j++)
for( i=0;i<10-j; i++)
if (a[i]>a[ i+1])
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf(“the sorted number:\n”);
for ( i=1; i<11; i++)
printf(“%d”,a[i]);
}

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

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

相關文章

搭建私有Claude體驗平臺:Open WebUI + Anthropic API + Trojan完整部署指南

言簡意賅的講解Open WebUI Anthropic API Trojan解決的痛點 身邊的小伙伴們都想體驗Claude&#xff0c;但直接訪問Anthropic API存在網絡連接問題。本文記錄了我如何通過Docker部署Open WebUI&#xff0c;結合網絡代理和Anthropic Manifold Pipe&#xff0c;為團隊搭建了一個…

Hadoop技術棧(一)hadoop搭建與HDFS常用命令

概念 hadoop是一個大數據的分布式存儲&#xff0c;調度&#xff0c;計算框架。也可以說是一個生態圈&#xff0c;包含很多技術&#xff1a;Hive、Hbase、Flume、Kafka... Hadoop的優點 Hadoop具有存儲和處理數據能力的高可靠性。 Hadoop通過可用的計算機集群分配數據&#xf…

electron之win/mac通知免打擾

目錄 系統區別 win&#xff1a;不支持桌面通知&#xff0c;使用氣泡顯示 mac&#xff1a;有鏡像/共享屏幕時 通知免打擾設置 代碼 Vuex&#xff1a;免打擾狀態 src/store/App/mutations.ts src/store/App/state.ts src/views/miracast/index.vue Util 【可選】src/ut…

為什么Integer緩存-128 ~ 127

背景 面試題, 相關問題的考察. 題目大概是, 包裝類型Integer 比較的時候 : -127 ~ 128 是否相等. 其他是否相等? 原理比較的是地址. 如果是不同的對象, 那么就不相等. 實踐 下面是幾個簡單實踐. 全部新建對象 解釋: 新建對象后, 地址不同, 所以都是false不新建對象 暫時的理解…

微軟Wasm學習-創建一個最簡單的c#WebAssembly測試工程

要創建一個最簡單的微軟 WebAssembly&#xff08;Wasm&#xff09;測試工程&#xff0c;最直接的方式是使用 Blazor WebAssembly&#xff0c;這是微軟官方推薦的 WebAssembly 開發框架。下面是創建和運行最簡單 Blazor WebAssembly 項目的步驟&#xff1a; 相關&#xff1a;微…

通過 GitHub520 項目自動獲取最新 Hosts 配置,無需手動查詢 IP。

操作步驟&#xff1a;打開終端Command 空格 聚焦搜索“終端”&#xff0c;打開應用。執行一鍵腳本復制以下命令粘貼到終端運行&#xff08;需輸入密碼授權&#xff09;&#xff1a;bashsed -i "" "/# GitHub520 Host Start/,/# Github520 Host End/d" /et…

C# 目錄與文件操作筆記

一、基本概念1. 數據存儲方式對比存儲方式適用場景特點數據庫存儲大量、關系復雜、有序的數據結構化強&#xff0c;支持復雜查詢和事務文件存儲少量、關系簡單的數據&#xff08;如日志&#xff09;操作簡便&#xff0c;可存儲于任意介質2. 文件與流文件&#xff1a;存儲在磁盤…

docker部署flask并遷移至內網

需要直接使用的可以使用下面的鏈接&#xff1a; 通過網盤分享的文件&#xff1a;docker_flask.tar 鏈接: https://pan.baidu.com/s/163ocPFw8cqfXgVXeejv36g?pwdqxqm 提取碼: qxqm 來自百度網盤超級會員v6的分享 外網部署docker版flask 目錄結構 ./miniconda-docker/ ├── d…

161. Java Lambda 表達式 - 使用工廠方法創建 Predicates

文章目錄161. Java Lambda 表達式 - 使用工廠方法創建 Predicates&#x1f3af; Predicate 工廠方法概覽&#x1f9ea; 示例一&#xff1a;Predicate.isEqual() 工廠方法&#x1f9ea; 示例二&#xff1a;Predicate.not() 工廠方法&#xff08;Java 11&#xff09;&#x1f3af…

c#Blazor WebAssembly在網頁中多線程計算1000萬次求余

在 Blazor WebAssembly 中實現多線程計算并獲取線程 ID 是可行的&#xff0c;但需要正確配置多線程環境并處理線程安全和 UI 更新邏輯。以下是完整示例和檢測方法&#xff1a;一、準備工作&#xff1a;啟用多線程支持首先需確保項目已啟用 WebAssembly 多線程&#xff0c;修改項…

鼠標右鍵沒有“通過VSCode打開文件夾”

1, WinR 打開運行&#xff0c;輸入regedit&#xff0c;打開注冊表&#xff0c;找到HKEY_CLASSES_ROOT\*\shell分支&#xff0c;如果沒有shell分支&#xff0c;則在*下點擊右鍵&#xff0c;選擇“新建&#xff0d;項”&#xff0c;建立shell分支。 2, 在shell下新建“VisualCod…

[ Spring 框架 ] 框架搭建和屬性賦值

目錄 1. Spring定義: (1). IOC( Inversion of Control): (2). AOP (Aspect Oriented Programming): (3)一站式: 2. spring搭建: (1). 創建一個Maven項目 (2). 導入核心 jar包 (3). 編寫 spring 配置文件 (4). 編寫實體類,并生成set方法 (5). 在resource中加入spring核…

前端 大文件分片下載上傳

前端 大文件分片下載上傳 背景介紹&#xff1a; 當前項目是給投行部門做系統&#xff0c;業務方需要有專門的文檔中心去管理文件&#xff0c;包括但是不限于文件的上傳和下載等等。筆者本來就是采用的瀏覽器表單上傳的方式進行文件上傳&#xff0c;但是誰曾想在進行稍微大一點的…

【Python練習】097. 編寫一個函數,實現簡單的版本控制工具

097. 編寫一個函數,實現簡單的版本控制工具 097. 編寫一個函數,實現簡單的版本控制工具 示例代碼 功能說明 使用方法 注意事項 實現方法 基于文件快照的實現方法 基于差異存儲的實現方法 基于命令模式的實現方法 基于Git-like的實現方法 097. 編寫一個函數,實現簡單的版本控…

嵌入式硬件篇---Tof

TOF 的原理與本質TOF&#xff08;Time of Flight&#xff0c;飛行時間&#xff09;是一種通過測量信號&#xff08;通常是光&#xff09;在空間中傳播時間來計算距離的技術。其本質是利用 “距離 速度 時間” 的物理公式&#xff1a;通過發射信號&#xff08;如激光、紅外光&…

Vue diff簡介

Vue3 diff 最長遞增子序列雙端diff 理念 相同的前置和后置元素的預處理&#xff0c;考慮邊界情況&#xff0c;減少移動&#xff1b;最長遞增子序列&#xff08;動態規劃、二分法&#xff09;&#xff0c;判斷是否需要移動 操作 前置與后置預處理判斷是否需要移動 遞增法&#x…

羅技MX Anywhere 2S鼠標修復記錄

【現象】單擊時總是出現雙擊的現象 【問題原因】從網絡收集&#xff1a; 說法1&#xff0c;歐姆龍微動損壞&#xff1b;說法2&#xff0c;按鍵磨損導致按鍵和微動開關接觸不良&#xff1b; 【問題排查】 微動損壞&#xff1a;拆掉殼子后&#xff0c;用手按住左鍵的微動開關&…

常見IP模塊的仲裁策略和實現

在一個 Message Unit 中包含兩個 Core&#xff08;處理器核心&#xff09;&#xff0c;它們之間訪問共享資源&#xff08;如寄存器、FIFO、buffer 等&#xff09;時&#xff0c;仲裁機制&#xff08;Arbitration&#xff09; 是確保系統穩定性和正確性的關鍵。以下是常見的仲裁…

上周60+TRO案件,波比的游戲時間/丹迪世界/飛盤/迪奧/多輪維權,手表/汽車品牌持續發力,垃圾桶專利等新增侵權風險!

賽貝整理上周&#xff08;2025年8月11日-8月15日&#xff09;的TRO訴訟案件發案情況&#xff0c;根據賽貝TRO案件查詢系統了解到&#xff0c;上周合計發起了超60起訴訟案件&#xff0c;涵蓋 IP /品牌、版權、專利等多個領域&#xff0c;涉及影視、奢侈品、汽車、游戲、日常用品…

用 Python 在 30 分鐘內搭一個「可回放的實時日志」——把攻擊流量變成可視化劇情

業務背景 我們運營一款 FPS 端游&#xff0c;外掛作者常把 DDoS 偽裝成「玩家掉線」來騙客服。以前排查要撈 CDN 日志、對時間戳、人工比對&#xff0c;平均 2 小時才能定位。現在用一條 30 行的 Python 腳本把邊緣節點日志實時打到 Kafka&#xff0c;再回放到 Grafana&#xf…