c語言--qsort函數(詳解)

目錄

  • 一、定義
  • 二、用qsort函數排序整型數據
  • 三、用qsort排序結構數據
  • 四、qsort函數的模擬實現

一、定義

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

二、用qsort函數排序整型數據

#include<stdio.h>
scanf_S(int *arr,int sz)
{for (int i = 0; i < sz; i++){scanf("%d", &arr[i]);}
}
int int_cmp(const void*p1,const void*p2)
{return(*(int*)p1 - *(int*)p2);
}                           
print(int *arr,int sz)
{for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}
}int main()
{int arr[10] = { 0 };int sz = sizeof(arr) / sizeof(arr[0]);scanf_S(arr,sz);qsort(arr, sz, sizeof(int), int_cmp);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 print(arr, sz);return 0;
}

三、用qsort排序結構數據

部分代碼

struct Stu //學?
{char name[20];//名字int age;//年齡
};
//假設按照年齡來?較
int cmp_stu_by_age(const void* e1, const void* e2)
{return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
//strcmp - 是庫函數,是專??來?較兩個字符串的??的
//假設按照名字來?較
int cmp_stu_by_name(const void* e1, const void* e2)
{return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
//按照年齡來排序
void test2()
{struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };int sz = sizeof(s) / sizeof(s[0]);qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
}
void test3()
{struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };int sz = sizeof(s) / sizeof(s[0]);qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
}
int main()
{test2();test3();return 0;
}

四、qsort函數的模擬實現

使用回調函數,模擬實現qsort(采用冒泡的方式)。

#include <stdio.h>int int_cmp(const void* p1, const void* p2)
{return (*(int*)p1 - *(int*)p2);
}
void _swap(void* p1, void* p2, int size)
{int i = 0;for (i = 0; i < size; i++){char tmp = *((char*)p1 + i);*((char*)p1 + i) = *((char*)p2 + i);*((char*)p2 + i) = tmp;}
}
void bubble(void* base, int count, int size, int(*cmp)(void*, void*))
{int i = 0;int j = 0;for (i = 0; i < count - 1; i++){for (j = 0; j < count - i - 1; j++){if (cmp((char*)base + j * size, (char*)base + (j + 1) * size) > 0){_swap((char*)base + j * size, (char*)base + (j + 1) * size, size);}}}
}
int main()
{int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };int i = 0;bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++){printf("%d ", arr[i]);}printf("\n");return 0;
}

在這里插入圖片描述
歐耶!!!我學會啦!!!!

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

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

相關文章

消息隊列kafka

消息隊列解決的問題 1. 解耦&#xff0c;通過消息隊列實現應用之間解耦&#xff0c;模塊兒之間解耦 2. 跨線程/進程通信&#xff0c;通過消息隊列傳遞數據&#xff0c;實現不同線程/進程間通信 3. 提升系統穩定性&#xff0c;在高并發場景通過消息隊列緩沖&#xff0c;可以實…

哈啰Java 春招 24屆

時長 1h 3. 為什么使用分布式ID&#xff0c;解決了什么問題 4. Leaf算法了解嗎&#xff1f;講一下原理和工作流程以及優缺點 5. 有沒有可能導致id重復&#xff1f;該如何解決&#xff1f; 6. 項目中redis是如何運用的&#xff1f; 7. 項目中分布式鎖是如何實現的&#xff1f; 8…

解決在 Mac 上安裝 Adobe 軟件彈出提示:安裝包已經被損壞并且不能被打開。

問題&#xff1a; “INSTALLER” is damaged and can’t be opened. You should eject the disk image. 解決方法和步驟&#xff1a; 打開安裝包&#xff1b;將安裝包 “INSTALLER” 拖動復制到某個文件夾&#xff0c;復制后的文件路徑例如像這樣&#xff1a;/Users/michael…

LLC諧振變換器變頻移相混合控制MATLAB仿真

微?關注“電氣仔推送”獲得資料&#xff08;專享優惠&#xff09; 基本控制原理 為了實現變換器較小的電壓增益&#xff0c;同時又有較 高的效率&#xff0c;文中在變頻控制的基礎上加入移相控制&#xff0c; 在這種控制策略下&#xff0c;變換器通過調節一次側開關管 的開關…

leetcode 熱題 100_盛最多水的容器

題解一&#xff1a; 雙指針遍歷&#xff1a;容量計算公式為min(左高度&#xff0c;右高度)*底部距離&#xff0c;我們可以令底部距離逐步遞減&#xff08;左右兩邊的指針向中部移動&#xff09;。此時對于min(左高度&#xff0c;右高度)&#xff0c;假設較高的線向中部移動&…

帶你玩轉數據結構-單鏈表(適合初學者的文章,講解的很仔細哦)

前言: &#x1f388;個人主頁:&#x1f388; :???初階牛??? &#x1f43b;推薦專欄: &#x1f354;&#x1f35f;&#x1f32f; C語言進階 &#x1f511;個人信條: &#x1f335;知行合一 &#x1f349;本篇簡介:>:講解數據結構中鏈表的知識,;鏈表的分類,c語言實現單鏈…

重學Springboot3-@import注解的作用

重學Springboot3-import注解的作用 1. 引言2. Import 注解的基本用法3. 導入多個配置類4. 使用 Import 導入組件5. 使用 ImportSelector 和 ImportBeanDefinitionRegistrar6. 總結 1. 引言 在 Spring Framework 中&#xff0c;Import 注解是一個重要的元注解&#xff0c;它允許…

Linux 定時備份文件到另一臺服務器

1. 需求 用戶要求將 Tomcat 的日志文件定時備份到另一臺服務器。同事給我提供了一個寫好的 java 框架&#xff0c;但實在不想給用戶再維護另一個服務了&#xff0c;所以另尋他法。 2. 問題 使用 scp 等跨服務器傳輸命令時需要手動輸入用戶名的密碼才可進行文件傳輸&#xff…

騰訊云幻獸帕魯服務器使用Linux和Windows操作系統的具體性能比較是什么?

騰訊云幻獸帕魯服務器使用Linux和Windows操作系統的具體性能比較是什么&#xff1f; 首先&#xff0c;從內核效率來看&#xff0c;Linux在同等硬件條件下的性能優于Windows。這是因為Linux內核設計簡潔&#xff0c;對服務器工作負載進行了優化&#xff0c;能夠更好地利用系統資…

機器學習:從理論到實踐

機器學習&#xff1a;從理論到實踐 摘要 機器學習是人工智能的一個核心領域&#xff0c;它使計算機能夠通過經驗來改進性能。本文將介紹機器學習的基本概念、主要算法以及如何在實際項目中應用這些算法。我們將通過Python代碼示例來演示如何使用機器學習庫scikit-learn進行數…

Python學習 day07(JSON)

JSON 各種編程語言存儲數據的容器不盡相同&#xff0c;在Python中有字典dict這樣的數據類型&#xff0c;而其他語言可能沒有對應的字典&#xff0c;為了讓不同的語言都能夠相互通用的傳遞數據&#xff0c;JSON就是一種非常良好的中轉數據格式&#xff0c;如下&#xff1a; JSON…

mTSL: netty單向/雙向TLS連接

創建證書 不管是單向tls還是雙向tls(mTLS)&#xff0c;都需要創建證書。 創建證書可以使用openssl或者keytool&#xff0c;openssl 參考 mTLS: openssl創建CA證書 單向/雙向tls需要使用到的相關文件: 文件單向tls雙向tlsServer端Client端備注ca.key----需要保管好&#xff0…

MySQL知識點歸納總結(二)

10、MVCC實現原理&#xff1f; 事務ID&#xff08;Transaction ID&#xff09;&#xff1a;每個事務在執行時都會被分配一個唯一的事務ID&#xff0c;用于標識該事務的開始時間順序。事務ID是一個遞增的整數&#xff0c;隨著每個新事務的開始而遞增。 Undo日志&#xff08;Un…

【Web安全靶場】sqli-labs-master 38-53 Stacked-Injections

sqli-labs-master 38-53 Stacked-Injections 其他關卡和靶場看專欄… 文章目錄 sqli-labs-master 38-53 Stacked-Injections第三十八關-報錯注入第三十九關-報錯注入第四十關-盲注第四十一關-盲注第四十二關-聯合報錯雙查詢注入第四十三關-報錯注入第四十四關-盲注第四十五關-…

「爬蟲職海錄」三鎮爬蟲

HI&#xff0c;朋友們好 「爬蟲職海錄」第三期更新啦&#xff01; 本欄目的內容方向會以爬蟲相關的“崗位分析”和“職場訪談”為主&#xff0c;方便大家了解一下當下的市場行情。 本欄目持續更新&#xff0c;暫定收集國內主要城市的爬蟲崗位相關招聘信息&#xff0c;有求職…

【高級數據結構】Trie樹

原理 介紹 高效地存儲和查詢字符串的數據結構。所以其重點在于&#xff1a;存儲、查詢兩個操作。 存儲操作 示例和圖片來自&#xff1a;https://blog.csdn.net/qq_42024195/article/details/88364485 假設有這么幾個字符串&#xff1a;b&#xff0c;abc&#xff0c;abd&…

Vue中如何實現條件渲染?

在Vue中實現條件渲染非常簡單且靈活&#xff0c;主要通過Vue的指令來實現。在Vue中&#xff0c;我們可以使用v-if和v-else指令來根據條件來渲染不同的內容。下面就讓我們通過一個簡單的示例來演示如何在Vue中實現條件渲染&#xff1a; <!DOCTYPE html> <html lang&qu…

GO泛型相關

通過引入 類型形參 和 類型實參 這兩個概念&#xff0c;我們讓一個函數獲得了處理多種不同類型數據的能力&#xff0c;這種編程方式被稱為 泛型編程。 2. Go的泛型 類型形參 (Type parameter)類型實參(Type argument)類型形參列表( Type parameter list)類型約束(Type constr…

Pake 輕松構建輕量級多端桌面應用

Pake 利用 Rust 輕松構建輕量級多端桌面應用&#xff0c;支持 Mac / Windows / Linux。 小白用戶&#xff1a;可以使用 「常用包下載」 方式來體驗 Pake 的能力&#xff0c;也可試試 Action 方式。 開發用戶&#xff1a;可以使用 「命令行一鍵打包」&#xff0c;對 Mac 比較友…

Matlab 機器人工具箱 動力學

文章目錄 R.dynR.fdynR.accelR.rneR.gravloadR.inertiaR.coriolisR.payload官網:Robotics Toolbox - Peter Corke R.dyn 查看動力學參數 mdl_puma560; p560.dyn;%查看puma560機械臂所有連桿的動力學參數 p560.dyn(2);%查看puma560機械臂第二連桿的動力學參數 p560.links(2)…