初識c語言————排序方法

今天我們學習的是c語言中的排序方法


目錄:

一.冒泡排序法

二.選擇排序法


下面我們正式學習c語言中的排序方法

一.冒泡排序法

1.冒泡排序法的過程:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 將無序的數組通過數組之間的大小比較,排成有序的樣子

2.例如:5,3,4,6? --->>3,5,4,6 --->>3,4,5,6 --->>3,4,5,6

? ? ? ? ? ? ?

第一輪排序(將最大值放到末尾)
1. 比較 [**5**, **3**, 4, 6]`→ 5 > 3 → 交換 ?
→ 數組變為 `[3, 5, 4, 6]` ?
2. 比較 [3, **5**, **4**, 6]?→ 5 > 4 → 交換 ?
→ 數組變為 `[3, 4, 5, 6]` ?
3. 比較 [3, 4, **5**, **6**]→ 5 < 6 → 不交換?

結果:[3, 4, 5, 6](最大值 6 已在末尾)

---

第二輪排序(檢查剩余部分)
1. 比較 [**3**, **4**, 5, 6]?→ 3 < 4 → 不交換?
2. 比較 [3, **4**, **5**, 6]?→ 4 < 5 → 不交換?

結果:[3, 4, 5, 6](無交換,排序完成)

---

最終結果:[3, 4, 5, 6]

3.注意:

? ? ? ? ? ?***若數組中有n個元素,那么需要進行n-1次排序(考慮最壞的情況)

? ? ? ? ? ?***因為每次排序是為了將最值放在數組末尾,所以每次排序只需進行n-a-1次比較(減少不必要的比較)

? ?代碼:

#include <stdio.h>void maopao(int num[],int n)
{for(int a=0;a<n-1;a++){for(int b=0;b<n-a-1;b++){if(num[b]>num[b+1]){int temp=num[b+1];num[b+1]=num[b];numb[b]=temp;}}}
}void prinmao(int num[],int n)
{for(int a=0;a<=n-1;a++){ printf("%d",num[a];}
}int main()
{int num[]={2,6,7,9};int n=sizeof(num)/sizeof(num[0]);maopao(num,n);prinmao(num,n);
}

? ?代碼解析:

1.maopao函數是一個讓數組進行冒泡排序的函數

? ?prinmao函數是一個打印數組的函數

2.n是指num這個函數中元素的個數

? ?所以對num進行冒泡排序只需進行n-1個排序

3.因為每次的排序會把最值放在末尾,所以為了節省空間,只需進行n-a-1個比較

4.因為在我們進行冒泡排序的時候比較方法是這種形式:num[b]>num[b+1],所以我們在進行二次循環的時候應該是b<n-a-1,而不是b<=n-a-1,這樣的目的是為了防止數組的下標溢出,而使用b<n-a-1也能保證每個數都參與了比較

二.選擇排序法

1.選擇排序法的過程:?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?假設第1個元素是最值,求第1個元素后面所有元素中比這個元素更最的值,將這個值與第1個元素進行值互換,然后在進行第二個元素,第三個元素------

2.例如:2,4,10,9 --->>10,4,2,9 --->>10,9,2,4 --->>10,9,4,2

第1輪排序**(i=0)
- **未排序部分**:`[**2**, 4, 10, 9]`
- 當前最小值:`2`(索引0)
- 比較過程:
- 2 < 4 → 保持
- 2 < 10 → 保持
- 2 < 9 → 保持
- **無需交換**(最小值已在正確位置)

**本輪結果**:`[**2**, 4, 10, 9]` ?
(已排序部分:`[2]`,未排序部分:`[4, 10, 9]`)

---

第2輪排序**(i=1)
- **未排序部分**:`[2, **4**, 10, 9]`
- 當前最小值:`4`(索引1)
- 比較過程:
- 4 < 10 → 保持
- 4 < 9 → 保持
- **無需交換**(最小值已在正確位置)

**本輪結果**:`[2, **4**, 10, 9]` ?
(已排序部分:`[2, 4]`,未排序部分:`[10, 9]`)

---

第3輪排序**(i=2)
- **未排序部分**:`[2, 4, **10**, 9]`
- 當前最小值:`10`(初始索引2)
- 比較過程:
- 10 > 9 → 更新最小值為 `9`(索引3)
- **交換 10 和 9**:
```c
temp = 10;
arr[2] = 9;
arr[3] = 10;

**本輪結果**:`[2, 4, **9**, 10]` ?
(已排序部分:`[2, 4, 9]`,未排序部分:`[10]`)

### **最終結果**:`[2, 4, 9, 10]` ?
(第4輪無需執行,因為最后一個元素自動就位)

3.注意:

? ? ? ? ? ? ***若數組中有n個元素,那么只需進行n-1次排序,因為最后一個元素自動就位

? ? ? ? ? ? ***因為選擇排序是把最值放在數組的前面,所以選擇的元素下標是a+1,為了保證最后一個元素參與了比較,所以第二個循環c<n

? ?代碼:

#include <stdio.h>void xuanze(int num[],int n)
{for(int a=0;a<n-1;a++){int b=a;for(int c=a+1,c<n;c++){  if(num[b]>num[c])b=c;}int temp=num[a];num[a]=num[b];num[b]=temp;}
}void prinxuan(int num[],n)
{for(int a=0;a<=n-1;a++)printf("%d",num[a];
}int mian()
{int num[]={2,10,4,9};int n=sizeof(num)/sizeof(num[0]);xuanze(num,n);prinxuan(num,n);
}

? ?代碼解析:

1.xuanze函數是一個將數組進行選擇排序的函數

? ?prinxuan函數是一個打印數組的函數

2.n是指數組中的元素的個數

? ?所以選擇排序只需進行n-1個排序

3.因為選擇排序選擇的數是根據排序次數來遞進的,所以每個標準數要從c=a+1開始

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

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

相關文章

爬蟲與數據分析結合案例:中國大學排名爬取與分析全流程

爬蟲與數據分析結合案例&#xff1a;中國大學排名爬取與分析全流程 一、案例背景與目標 本案例以高三網中國大學排名&#xff08;網址&#xff1a;2021中國的大學排名一覽表_高三網&#xff09;為數據源&#xff0c;完成從數據爬取到分析可視化的全流程實踐。主要目標包括&am…

行業分享丨SimSolid 在汽車零部件開發中應用的可行性調研及實踐

*本文源自汽車行業用戶范會超投稿1、背景車型短周期開發背景下&#xff0c;高效的仿真技術顯得尤為重要。Altair 推出了多款加速設計/仿真的軟件&#xff0c;其中無網格軟件 SimSolid 與業務有一定的契合度&#xff0c;有必要論證其在汽車零部件結構分析領域的可行性。2、目標評…

MacOS字體看起來比在 Windows 上更好?

字體控們注意啦&#xff01;&#x1f389;你們有沒有發現&#xff0c;同樣一段文字&#xff0c;在Mac和Windows上看起來就是不一樣&#xff1f;Mac上的字仿佛自帶柔光濾鏡&#xff0c;圓潤又舒適&#xff1b;而Windows上的字則像是精心雕琢的刀鋒&#xff0c;銳利且清晰。這背后…

Torch -- 卷積學習day1 -- 卷積層,池化層

目錄 一、CNN概述 二、卷積層 1、卷積核 2、卷積計算 3、邊緣填充 4、步長 5、多通道卷積計算 6、多卷積核卷積計算 7、特征圖大小 8、卷積參數共享 9、局部特征提取 10、卷積層API 三、池化層 1、池化層概述 1.池化層的作用 2.池化層類型 2、池化層計算 3、步…

藍橋杯---第六屆省賽單片機組真題

先出手寫的代碼&#xff0c;代碼分析還需要一段時間&#xff0c;不難&#xff0c;大家認真寫。#include <STC15F2K60S2.H> #include "Seg.h" #include "LED.h" #include "Key.h" #include "DS1302.h" #include "DS18B20.h&…

GPT-5深度解析:精準、高效、務實的新一代AI引擎

&#x1f31f; GPT-5深度解析&#xff1a;精準、高效、務實的新一代AI引擎在萬眾矚目中&#xff0c;OpenAI于2025年8月7日正式推出GPT-5——這一代模型沒有華麗的創意革命&#xff0c;卻以驚人的準確率提升、斷崖式降價和強大的工程能力&#xff0c;悄然重塑了生成式AI的應用邊…

oss(阿里云)前端直傳

WEB端前端直傳 參考文檔&#xff1a;web前端直傳并設置上傳回調 封裝oss-upload.ts // 圖片上傳 import { uploadToken } from /api/uploadFile.js // 獲取oss token接口// 定義 OSS 信息類型 interface OssInfo {policy: string;signature: string;x_oss_credential: strin…

vscode uv 發布一個python包:編輯、調試與相對路徑導包

背景 最近一直在使用uv做python包管理&#xff0c;用起來很方便。 尤其是在代碼上傳到github的時候&#xff0c;pyproject.toml 會顯示出當前項目依賴的python包。這樣在把代碼下載到本地之后&#xff0c;直接uv sync就可以很方便地恢復出python環境。 uv 除了有上述優點&…

Secure 第四天作業

實驗需求&#xff1a;需求一拓撲&#xff1a;按照以上拓撲所示&#xff0c;完成以下需求&#xff1a;參考以上拓撲&#xff0c;配置設備IP地址&#xff0c;使用UNL里Secure第四天拓撲即可。&#xff08;有興趣的同學課后也可按照PPT原拓撲做做實驗&#xff09;&#xff1b;配置…

利用開漏輸出模式模擬IIC

/************************************************************利用IO口模擬IIC時序&#xff0c;需要使用2個IO口(SDA和SCL)SCL時鐘線只能由主器件進行控制&#xff0c;所以SCL引腳必須為輸出模式SDA數據線&#xff0c;在主器件發送數據時&#xff0c;SDA引腳為輸出模式SDA數…

閘機控制系統從設計到實現全解析:第 5 篇:RabbitMQ 消息隊列與閘機通信設計

第 5 篇&#xff1a;RabbitMQ 消息隊列與閘機通信設計RabbitMQ 是一款開源的消息隊列中間件&#xff08;Message Queue&#xff0c;MQ&#xff09;&#xff0c;基于 Erlang 語言開發&#xff0c;遵循 AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c;高級消息隊…

Linux 常用命令大全:覆蓋日常 99% 操作需求

1、基本命令 pwd&#xff1a;顯示當前工作目錄的絕對路徑&#xff0c;例如在復雜目錄結構中快速確認位置&#xff0c;執行后會輸出類似/home/user/documents的結果。 cd&#xff1a;切換目錄&#xff0c;cd 目錄路徑可進入指定目錄&#xff0c;cd ~回到當前用戶的家目錄&…

普通電腦與云電腦的區別有哪些?全面科普

近年來&#xff0c;越來越多的人不再購置升級自己的電腦&#xff0c;轉而選擇云電腦&#xff0c;云端產品正在變得越來越普及易用。那么它究竟跟我們的普通本地設備有什么區別吶&#xff1f;或許很多人并不知悉&#xff0c;對此&#xff0c;本篇內容小編就為大家簡要科普一下普…

【Python】支持向量機SVM

示例代碼&#xff1a;import numpy as np import matplotlib.pyplot as plt from sklearn import svm from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report# 設…

當AI學會“抄近路”:殘差網絡如何突破深度學習的極限

**——解讀《Deep Residual Learning for Image Recognition》**今天我想帶大家回到2015年&#xff0c;見證人工智能領域的一場“捷徑革命”——由何愷明等人提出的**深度殘差學習框架&#xff08;ResNet&#xff09;**。這篇論文解決了困擾AI界多年的“深度詛咒”&#xff0c;…

HCIP--BGP綜合實驗

目錄 BGP綜合實驗報告 一、實驗拓撲 二、實驗要求 三、實驗思路 &#xff08;一&#xff09;IP地址規劃 &#xff08;二&#xff09;整體思路 四、實驗步驟 &#xff08;一&#xff09; IP地址配置 &#xff08;二&#xff09; AS2內部配置OSPF協議 &#xff08;三&a…

Java 基礎編程案例:從輸入交互到邏輯處理

在Java編程學習中&#xff0c;輸入輸出、循環控制和邏輯判斷是核心基礎。本文整理了10個經典案例&#xff0c;涵蓋Scanner輸入處理、斐波那契數列、成績統計、登錄驗證等場景&#xff0c;幫助初學者掌握編程邏輯與實用技巧。 一、Scanner輸入交互&#xff1a;獲取用戶輸入并處理…

LeetCode 面試經典 150_數組/字符串_整數轉羅馬數字(18_12_C++_中等)(模擬)(對各位進行拆解)

LeetCode 面試經典 150_數組/字符串_整數轉羅馬數字&#xff08;18_12_C_中等&#xff09;題目描述&#xff1a;輸入輸出樣例&#xff1a;題解&#xff1a;解題思路&#xff1a;思路一&#xff08;模擬&#xff09;&#xff1a;思路二&#xff08;對各位進行拆解&#xff09;&a…

計算機網絡摘星題庫800題筆記 第6章 應用層

第6章 應用層 6.1 網絡應用的架構 考點 1 CS 架構 題組闖關 1.DNS 是基于 ( ) 模式的分布式系統。 A. C/S B. B/S C. P2P D. 以上均不正確 1.【參考答案】A 【解析】本題考查網絡應用模型。 DNS 作為分布式應用&#xff0c;是一種典型的 C/S 模式&#xff0c;是隨著 Internet 技…

BLUCK電路的輸入電容應該怎么選取

借用TI的BULK芯片討論一下輸入電容怎么選取的問題&#xff0c;BULK電源是我們常用的電源&#xff0c;它的原理請看之前的文章&#xff1a; 高壓差為何不用LDO&#xff1f;DCDC效率更高&#xff01;-CSDN博客 本文我們探討一下輸入電容&#xff0c;輸入電容是控制紋波的關鍵&a…