一篇文章看懂《qsort》快排的用法
- 前言
- 一、庫函式(qsort)的含義
- 二、(qsort)函式的實作方式,話不多說,請看,
- 1. 第一個引數
- 2. 第二個引數
- 3. 第三個引數
- 4. 第四個引數
- 1). 函式的引數
- 2). 這第四個引數的重點
- 三、函式實作
- 四、總結
前言
我也只是一個奮斗的程式猿,僅以此篇文章,作為我學習的見證,可能我的文采不好,有時候講的詞不達意,但我盡力去做好我想做的這些事情,如果此篇文章能夠給各位讀者帶來一定的認識,那自然是最好的,若文章中有鄙人講錯了的,歡迎評論區指點,謝謝!!!
一、庫函式(qsort)的含義
- 頭檔案 #include <stdlib.h>
- 作用:將一個無序的陣列進行有序的排列,這就是這個庫函式的作用,
二、(qsort)函式的實作方式,話不多說,請看,
void qsort( void base,
size_t num,
size_t width,
cmp_int );
全是英語看不懂?別擔心,讓我慢慢為你道來!!!
1. 第一個引數
void base, 這個引數的意思就是 將要排序的那個陣列 ,我們在寫的時候,直接寫陣列名就行了,
2. 第二個引數
size_t num, 第二個引數的意思就是 void base,這個陣列的元素個數,比如int arr[10],這里就寫10,這里舉個栗子,下面會繼續講解,
3. 第三個引數
size_t width, 這第三個引數呢,灰常簡單,就是該陣列元素的 大小 ,例如:整形陣列 int arr[10],元素大小就是4個位元組,因為整形(int)在記憶體中占的就是4個位元組的空間,
4. 第四個引數
這最后一個引數呢,稍微復雜那么一點點的引數,也不難的,往下看, cmp_int , 其實在MSDN上這里寫得稍微看上去很復雜,這里呢,我將這第四個引數封裝為一個函式,讓我們看上去簡單一點,實則原理都是相同的,具體的函式實作如下:
int cmp_int(const void* e1, const void* e2)
{
//e1-e2,得到的是升序
return *(int*)e1 - *(int*)e2;
}
1). 函式的引數
const void* e1 和 const void* e2,兩個引數接收的都是陣列里面元素的地址, void* 意思就是無型別指標,它呢,比較特殊,它可以接收來自任何型別的值,比如float、int、char等等,它都能接收,至于這里的 const 就是修飾(*e1)或(*e2),當有 const 修飾時,這兩個的值就不能被修改,具體的,大家可以查一下,這里就不多講了,
2). 這第四個引數的重點
當e1減去e2時,我們最后輸出得到的就是 升序 的結果,當然,e2減去e1,就是 降序 ,口訣: 左減右為升,反之則降 ,大家可能還注意到了 e1 前面還有個圓括號,(int *)e1,為什么呢???我們所要排序的陣列是整形陣列 int arr[10], 當我們使用尋址運算子時,計算機會知道我們所需要訪問的空間大小嗎??顯然,它是不知道的,尋址運算子是根據資料的型別,根據型別的大小去訪問記憶體空間,這里我們需要 強制型別轉換 為整形才可以去訪問的,不然計算機也不知道我們具體需要訪問多大的記憶體空間,是吧,
講到這里呢,也就講完了,我們看具體的代碼實作吧,,
三、函式實作
//qsort的用法
#include <stdio.h>
#include <stdlib.h>
int cmp_int(const void* e1, const void* e2)
{
//e1-e2,得到的是升序
return *(int*)e1 - *(int*)e2;
}
int main()
{
int arr[10] = { 2,3,1,4,5,6,7,9,8,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);
int i = 0;
for (i = 0; i < sz; i++)
printf("%d ", arr[i]);
return 0;
}
最后看一下我們輸出的結果:
四、總結
快速排序不僅僅只是排序整形哦,還可以浮點型等等,我們在對不同型別的資料進行排序時,只需要注意最后一個引數里面的內容稍有改動,其他的大致差不多,特別記住 左減右為升,反之則降 哦,這個記住了,也就懂了這個庫函式是怎么用的,
最后祝大家的編程技術更上一層樓,加油,共勉,還有啊,英語不好的小伙伴,一定要把英語補起來哦,鄙人就是高中沒好好學英語,現在查檔案,上GitHub等等,很費力啊,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/243827.html
標籤:其他
上一篇:計原一微機系統概述
