【C語言】常見的數據排序算法

目錄

一、概述

二、常見的排序算法

2.1 冒泡排序

2.1.1 定義

2.1.2 C語言實現

2.2 快速排序

2.2.1 定義

2.2.2 C語言實現

2.3 插入排序

2.3.1 定義

2.3.2 C語言實現

2.4 希爾排序

2.4.1 定義

2.4.2 C語言實現

2.5 歸并排序

2.5.1 定義

2.5.2 C語言實現

2.6 基數排序

2.6.1 定義

2.6.2 C語言實現

三、排序算法的空間、時間復雜度、穩定性


一、概述

        排序算法是《數據結構與算法》中最基本的算法之一。排序算法可以分為內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。

二、常見的排序算法

2.1 冒泡排序

2.1.1 定義

       冒泡排序是一種簡單的排序算法,它重復地遍歷要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。重復進行直到沒有再需要交換的元素,這意味著數列已經排序完成。

2.1.2 C語言實現

        這段代碼首先定義了一個冒泡排序函數bubble_sort,它接受一個整型數組和數組的長度作為參數。然后定義了兩個輔助函數print_array用于打印數組和main函數作為程序的入口。在main函數中,我們首先打印原始數組,然后調用冒泡排序函數進行排序,并再次打印排序后的數組。

#include <stdio.h>void bubble_sort(int arr[], int len) {int i, j, temp;for (i = 0; i < len - 1; i++)for (j = 0; j < len - 1 - i; j++)if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}
}void print_array(int arr[], int len) {int i;for (i = 0; i < len; i++)printf("%d ", arr[i]);printf("\n");
}int main() {int arr[] = {64, 34, 25, 12, 22, 11, 90};int len = (int) sizeof(arr) / sizeof(*arr);printf("Original array: ");print_array(arr, len);bubble_sort(arr, len);printf("Sorted array: ");print_array(arr, len);return 0;
}

2.2 快速排序

2.2.1 定義

        快速排序作為多種排序方法中效率最高的一種,其底層原理被廣泛運用,他的核心思想與二叉樹結構中的遞歸邏輯相似,首先標記一個元素作為基準點,然后利用該基準點把數組分成左右兩個區間,并且使小于該基準點的元素放在左區間,大于該基準點的元素放在右區間,如此反復遞歸,直到數組為一個有序數組。

2.2.2 C語言實現

        這段代碼首先定義了一個輔助函數swap用于交換數組中的元素。然后定義了partition函數來選擇一個基準點并重新排列數組,使得比基準點小的元素都在它的左側,比基準點大的元素都在它的右側。最后,quickSort函數遞歸地對數組的左右部分進行排序。printArray函數用于打印排序后的數組。在main函數中,我們定義了一個數組并對它進行排序,然后打印排序結果。

#include <stdio.h>void swap(int* a, int* b) {int t = *a;*a = *b;*b = t;
}int partition (int arr[], int low, int high) {int pivot = arr[high];int i = (low - 1);for (int j = low; j <= high - 1; j++) {if (arr[j] < pivot) {i++;swap(&arr[i], &arr[j]);}}swap(&arr[i + 1], &arr[high]);return (i + 1);
}void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi

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

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

相關文章

【@AutoWired和@Resource的區別】

AutoWired和Resource的區別 這兩個我們在項目中&#xff0c;經常去使用。很少有人知道他們有什么區別。下面我們將從 來源依賴查找順序支持的參數依賴注入的用法支持 這四個方面來說明他們倆個的區別 來源 Autowired: 這是Spring框架自帶的注解&#xff0c;用于實現自動依…

絕區零 Mac 下載安裝詳細教程(MacOS IPA 砸殼包 playCover 完美運行)

絕區零 7.4 號開始公測&#xff0c;但剛剛就可以開始下載了&#xff0c;我也是第一時間就迫不及待的安裝到了我的 Mac 電腦上&#xff0c;感興趣的朋友可以跟我一起安裝試試 我這里是通過 playCover 的形式在 Mac 上安裝運行的&#xff0c;根據之前原神的經驗所以這次還是同樣…

惠海 H6912 升壓恒流芯片IC 支持2.6-40V升12V24V36V48V60V100V 10A 攝影燈 太陽能燈 UV燈 殺菌燈

1.產品描述 H6912是一款外圍電路簡潔的寬調光比升壓調光LED恒流驅動器&#xff0c;可適用于2.6-40V輸入 電壓范圍的LED恒流照明領域。H6912可以實現高精度的恒流效果&#xff0c;輸出電流恒流精度≤士3%&#xff0c;電壓工作范圍為2.6-40V.可以輕松滿足鋰電池及中低壓的應用需…

Python中的爬蟲實戰:貓眼電影爬蟲

隨著互聯網技術的快速發展&#xff0c;網絡上的信息量越來越龐大。貓眼電影作為國內領先的電影數據平臺&#xff0c;為用戶提供了全面的電影信息服務。本文將介紹如何利用python編寫簡單的貓眼電影爬蟲&#xff0c;獲取電影相關數據。 爬蟲概述 爬蟲&#xff0c;即網絡爬蟲&a…

x264 編碼器 common.h 文件中結構體詳細介紹

x264_slice_header_t 定義:typedef struct {x264_sps_t *sps;x264_pps_t *pps;int i_type;int i_first_mb;int i_last_mb;int i_pps_id;int i_frame_num

嵌入式Linux系統編程 — 6.1 信號的基本概念

目錄 1 信號的概念和作用 1.1 什么是信號 1.2 信號的目的 1.3 信號如何處理 2 信號的分類 2.1 可靠信號與不可靠信號 2.2 實時信號與非實時信號 3 常見信號與默認行為 3.1 信號本質上是 int 類型數字編號 3.2 常見信號 1 信號的概念和作用 1.1 什么是信號 信號是一…

艾體寶干貨 | 解析Redis企業版的多租戶技術

在多租戶架構中&#xff0c;一個軟件實例為多個不同的用戶組&#xff08;或“租戶”&#xff09;提供服務。每個租戶的數據都被安全地隔離&#xff0c;確保它們對其他租戶不可見且無法訪問。可以將其想象為一棟公寓大樓&#xff0c;每個人都住在共享建筑中獨立且隔離的單元中。…

Java 商城后臺管理系統

### 構建一個健壯的商城后臺管理系統 使用Java Spring Boot框架和MySQL數據庫&#xff0c;逐步構建一個健壯、安全、高效的商城后臺管理系統。本文涵蓋用戶管理、商品管理、訂單管理、分類管理、權限控制、日志記錄、分頁和排序、文件上傳、緩存以及國際化。 --- #### 項目初…

大模型時代的基礎架構,大模型算力中心建設指南重磅來襲!

什么是最暢銷商品&#xff1f;什么是高毛利商品&#xff1f; 我們來看一個例子&#xff1a; 一件T恤使用成本為100元的原料&#xff0c;價格為140元。另一件T恤使用成本為80元的原料&#xff0c;但在樣式、顏色、圖案的設計上比較有特色&#xff0c;價格也為140元。 當這兩件…

【JVM-04】線上CPU100%

【JVM-04】線上CPU100% 1. 如何排查2. 再舉一個例子 1. 如何排查 ?般CPU100%瘋狂GC&#xff0c;都是死循環的鍋&#xff0c;那怎么排查呢&#xff1f;先進服務器&#xff0c;?top -c 命令找出當前進程的運?列表按?下 P 可以按照CPU使?率進?排序顯示Java進程 PID 為 2609…

蘇東坡傳-讀書筆記七

蘇堤和西湖之與杭州&#xff0c;正如美女花容月貌上的雙眸。我常想&#xff0c;倘若西湖之是空空的一片水——沒有蘇堤那秀美的修眉和虹彩般的仙島&#xff0c;一畫龍點睛增其神韻&#xff0c;那西湖該望之如何?幾百年來的中國游客&#xff0c;春季到來之時&#xff0c;向西湖…

throw和catch關鍵字的作用。

在C中&#xff0c;throw和catch是異常處理機制的關鍵字&#xff0c;它們共同工作以處理在程序執行過程中發生的異常情況。 throw 關鍵字 throw關鍵字用于拋出一個異常。當程序遇到無法處理的錯誤時&#xff0c;它會使用throw語句拋出一個異常。這通常是因為遇到了某些無法恢復…

使用Vue 2 + Element UI搭建后臺管理系統框架實戰教程

后臺管理系統作為企業內部的核心業務平臺&#xff0c;其界面的易用性和功能性至關重要。Vue 2作為一個成熟的前端框架&#xff0c;以其輕量級和高效著稱&#xff0c;而Element UI則是一套專為桌面端設計的Vue 2組件庫&#xff0c;它提供了豐富的UI元素和組件&#xff0c;大大簡…

如何在Python中實現一個簡單的爬蟲程序

如何在Python中實現一個簡單的爬蟲程序 隨著互聯網的發展&#xff0c;數據已成為當今社會最寶貴的資源之一。而爬蟲程序則成為了獲取互聯網數據的重要工具之一。本文將介紹如何在Python中實現一個簡單的爬蟲程序&#xff0c;并提供具體的代碼示例。 確定目標網站 在開始編寫爬…

【Python】已解決:urllib.error.HTTPError: HTTP Error 403: Forbidden

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決&#xff1a;urllib.error.HTTPError: HTTP Error 403: Forbidden 一、分析問題背景 在使用Python的urllib庫中的urlopen或urlretrieve函數下載文件時&#xff0c;有時會遇到…

Android動畫:提升用戶體驗的關鍵技術

Android平臺上的動畫技術不僅僅是界面美化的手段&#xff0c;它更是提升用戶體驗、增強交互性和吸引用戶注意力的重要工具。從簡單的過渡動畫到復雜的視圖動態效果&#xff0c;Android開發者可以利用豐富的動畫API創造出令人印象深刻的應用程序。本文將深入探討Android動畫的多…

Python打字練習

代碼解析 導入模塊和定義單詞列表 import tkinter as tk import randomsample_words ["apple", "banana", "cherry", "date", "fig", "grape", "kiwi", "lemon", "mango", &quo…

LDA主題分析的原理、步驟和實現

當然可以&#xff01;LDA 主題模型是一種強大的工具&#xff0c;用于從大量文本數據中發現隱藏的主題。讓我們更詳細地介紹它的原理、步驟和實現。 LDA原理 LDA是一種生成模型&#xff0c;它假設&#xff1a; 每個文檔是由若干主題組成的。每個主題是由若干詞匯組成的。 具…

vcpkg國內鏡像源替換

vcpkg國內鏡像源替換 一、從Gitee上下載vcpkg二、全局替換vcpkg/scripts文件下的字符三、回到vcpkg目錄下&#xff0c;執行bootstrap-vcpkg.bat文件&#xff0c;等待執行完畢四、全局替換vcpkg/ports文件下的字符 一、從Gitee上下載vcpkg git clone https://gitee.com/mirrors…

全國30省份各省資本存量數據固定資本形成總額永續盤存法(2000-2023年)

各省資本存量數據通過永續盤存法進行了詳細的計算&#xff0c;這一方法覆蓋了中國30個省份&#xff08;不包括西藏&#xff09;&#xff0c;提供從2000年起直至2023的資本存量數據集。包括原始數據、測算過程、最終的資本存量結果。 以2000年作為基期年份&#xff0c;依據…