冒泡排序實現以及優化

一,冒泡排序說明

冒泡排序是從第一個元素開始和后面一個元素進行判斷是否滿足左小右大,如果不滿足就交換位置,再拿第二個和第三個進行上述操作一直到第n-1和第n個。

經過上述的一輪操作就可以把第一個最大值放到最右邊,在進行n輪上述操作就可完成所有元素的排序

因此冒泡排序的時間復雜度穩定為O(n^2)

二,冒泡排序代碼

//
// Created by 27893 on 2025/8/10.
//#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "BubbleSort.h"void BubbleSort(SortTable *table) {for (int i=0;i<table->length;i++) {for (int j=0;j<table->length-i-1;j++) {if (table->data[j].key>table->data[j+1].key) {swap(&table->data[j],&table->data[j+1]);}}}
}void swap(Element*a,Element*b) {Element*temp=malloc(sizeof(Element));memcpy(temp,a,sizeof(Element));memcpy(a,b,sizeof(Element));memcpy(b,temp,sizeof(Element));free(temp);
}

三,冒泡排序的優化

1.第一種

隨著我們的交換可能不需要n輪就已經將所有元素排好序了,比如我們在對第一個最大值進行排序時就可以把所有元素排好序,就沒必要進行第二輪了,我們就可以用一個變量來記錄這輪內循環是否有過交換,若果沒有就說明已經排好序了

void BubbleSort(SortTable *table) {for (int i=0;i<table->length;i++) {int isSorted=1;for (int j=0;j<table->length-i-1;j++) {if (table->data[j].key>table->data[j+1].key) {isSorted=0;swap(&table->data[j],&table->data[j+1]);}}if (isSorted) {break;}}
}

2.第二種

如下圖假如經過第一輪排序,從65開始后面的元素就已經有序了,那么下輪排序就只需要循環到65為止后面的就不需要比較了

void BubbleSortV3(SortTable *table) {int newIndex=0;do {int n=table->length;for (int i=0;i<n-1;i++) {if (table->data[i].key>table->data[i+1].key) {swap(&table->data[i],&table->data[i+1]);newIndex=i+1;}}n=newIndex;}while (newIndex>0);
}

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

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

相關文章

水下管道巡檢機器人cad【10張】三維圖+設計說明書

摘 要 水下管道是水下油氣管道的生命線&#xff0c;水下管道巡檢機器人可以替代人工完成水下油氣管道狀態的實時監測和數據反饋&#xff0c;有助于工作人員對水下油氣管道的運行情況實時掌握。 本文完成了水下管道巡檢機器人的總體設計&#xff0c;采用三維設計軟件Solidwor…

SQL(結構化查詢語言)的四大核心分類

這張圖展示了 SQL&#xff08;結構化查詢語言&#xff09;的四大核心分類&#xff0c;分別對應不同的數據庫操作場景。以下是逐類解析&#xff1a;1. 數據操作語言&#xff08;DML&#xff1a;Data Manipulation Language&#xff09;作用&#xff1a;用于操作數據庫中的數據&a…

AI(1)-神經網絡(正向傳播與反向傳播)

&#x1f34b;&#x1f34b;AI學習&#x1f34b;&#x1f34b;&#x1f525;系列專欄&#xff1a; &#x1f451;哲學語錄: 用力所能及&#xff0c;改變世界。 &#x1f496;如果覺得博主的文章還不錯的話&#xff0c;請點贊&#x1f44d;收藏??留言&#x1f4dd;支持一下博主…

嵌入式Linux學習 - 數據結構6

五、哈希表1. 哈希算法將數據通過哈希算法映射成一個鍵值&#xff0c;存取都在同一位置實現數據的高效存儲和查找將時間復雜度盡可能降低至O(1)2. 哈希碰撞多個數據通過哈希算法得到的鍵值相同&#xff0c;稱為產生哈希碰撞3. 哈希表構建哈希表存放0-100之間的數據將0 - 100之間…

GitHub 趨勢日報 (2025年08月07日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖1894nautilus_trader354stagehand315openai-cookbook263sim242ollama230prisma154v…

android 使用openimagelib OpenImage 實現點擊放大圖片,瀏覽

在 Android 中使用 OpenImageLib(假設這是一個開源圖片加載庫,類似于 Glide 或 Picasso)實現 點擊放大圖片并瀏覽 的功能,通常需要結合 圖片查看器庫(如 PhotoView)和 圖片加載庫(如 OpenImageLib)。以下是完整的實現方案: 1. 添加依賴 (1) 添加 OpenImageLib 依賴 …

計算機視覺CS231n學習(4)

深度學習軟件 &#xff08;這一部分去看tensorflow和pytorch的筆記&#xff09; &#xff08;見專欄&#xff09;tensorflow和pytorch區別 tensorflow&#xff0c;我們先構建顯示的圖&#xff0c;然后重復運行它 pytorch&#xff0c;我們每次做前向傳播時&#xff0c;都構建一個…

【具身智能】具身智能的革命——人形機器人如何重塑人類日常生活

還在為高昂的AI開發成本發愁?這本書教你如何在個人電腦上引爆DeepSeek的澎湃算力! 2025年被譽為具身智能的元年,人形機器人技術迅猛發展,將深刻改變人類生活方式。本文從具身智能的核心概念入手,探討人形機器人的硬件架構、感知系統、運動控制和決策算法等技術基礎。結合…

Jira Service Management企業服務管理:IT、HR、法務、財務等部門如何落地現代企業服務管理理念與實踐

Jira Service Management 服務管理方法Jira Service Management 服務管理方法將開發、IT運營和業務團隊整合至一個統一平臺&#xff0c;以實現更高效的協作。任何團隊都能夠快速響應業務變化&#xff0c;為客戶和員工提供卓越體驗。Jira Service Management 提供直觀、經濟高效…

軟件開發 - danger 與 dangerous、warn 與 warning

danger 與 dangerous 1、danger詞性&#xff1a;n.含義&#xff1a;指可能造成傷害或損失的情況或事物# 例詞in 【danger】&#xff08;處于危險中&#xff09; out of 【danger】&#xff08;脫離危險&#xff09;# 例句After the surgery, the doctor said the patient was o…

為何毫米波需要采用不同的DPD方法?如何量化其值?

摘要 在5G新無線電技術標準中&#xff0c;除了sub-6 GHz頻率外&#xff0c;還利用毫米波(mmWave)頻率來提高吞吐量。毫米波頻率的使用為大幅提高數據吞吐量帶來了獨特的機會&#xff0c;同時也帶來了新的實施挑戰。本文探討sub-6 GHz和毫米波基站無線電之間的架構差異&#xff…

【數據結構入門】棧和隊列的OJ題

目錄 1. 有效的括號 分析&#xff1a; 代碼&#xff1a; 2. 用隊列實現棧 分析&#xff1a; 代碼&#xff1a; 3. 用棧實現隊列 分析&#xff1a; 代碼&#xff1a; 4. 設計循環隊列 思路&#xff1a; 代碼&#xff1a; 定義循環隊列結構體&#xff1a; 初始化結…

#Datawhale AI夏令營#第三期全球AI攻防挑戰賽(AIGC技術-圖像方向)

本次題目來源于Datawhale AI夏令營第三期全球AI攻防挑戰賽圖像生成賽道。首先看一下賽題背景和要求。1.賽題相關大賽背景隨著大模型&#xff08;Deepseek、GPT、LLaMA等&#xff09;的爆發式應用&#xff0c;AI技術已深度融入金融、醫療、智能終端語音交互場等核心領域&#xf…

Compose筆記(四十二)--RangeSlider

這一節主要了解一下Compose中的RangeSlider&#xff0c;在Jetpack Compose中&#xff0c;RangeSlider是Material3庫提供的雙滑塊范圍選擇控件&#xff0c;用于在一個連續區間內選擇最小值和最大值。它能直觀地設置一個區間范圍&#xff0c;廣泛應用于篩選、過濾等場景,簡單總結…

window10本地運行datax與datax-web

搭建 dataX 前置條件 JDK(1.8以上&#xff0c;推薦1.8)Python(2或3都可以)Apache Maven 3.x (Compile DataX) 下載 datax 編譯好的包 https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz 進入目錄&#xff0c;使用 powershell 打開 執行解壓命令…

PDF注釋的加載和保存的實現

PDF注釋功能文檔 概述 本文檔詳細說明了PDF注釋功能的實現&#xff0c;包括注釋的加載和保存功能。該功能基于Android PDFBox庫實現&#xff0c;支持Ink類型注釋的讀取和寫入。 功能模塊 1. 注釋加載功能 (getAnnotation()) 功能描述 從PDF文件中加載已存在的注釋&#xff0c;并…

Linux環境下實現簡單TCP通信(c)

具體代碼實現 server.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>#define PORT 8080 #define BUFFER_SIZE 1024void handle_client(int client_s…

炫酷圓形按鈕調色器

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>圓形按鈕顏色控制器</title><style>bod…

Vue 3 的編譯時優化如何改寫 DOM 操作規則

在現代前端開發中&#xff0c;框架級優化正悄然改變我們處理性能瓶頸的方式。與手動優化策略不同&#xff0c;Vue 3 的編譯器在構建階段就完成了關鍵性能改造&#xff0c;為 DOM 操作效率帶來質的飛躍。一、虛擬DOM的隱藏成本虛擬DOM&#xff08;Virtual DOM&#xff09;通過內…

Angular初學者入門第二課——.ts、.d.ts、.state.ts的區別(精品)

初次接觸 Angular 實際項目時&#xff0c;發現里邊有很多不同后綴的文件&#xff0c;雖然沒深入研究過&#xff0c;但根據其他編程語言的經驗猜測這應該是通過后綴名來區分文件的作用。后來有時間研究了一下具體的細節和不同點&#xff0c;就有了今天這篇文章&#xff0c;這些知…