国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用冒泡排序?qū)崿F(xiàn)快速排序(qsort函數(shù)),指針進(jìn)階實(shí)例

這篇具有很好參考價(jià)值的文章主要介紹了用冒泡排序?qū)崿F(xiàn)快速排序(qsort函數(shù)),指針進(jìn)階實(shí)例。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-832428.html

1、qsort函數(shù)是什么

2、冒泡排序?qū)崿F(xiàn)指針進(jìn)階

2.1 主函數(shù)

2.2 功能函數(shù)聲明?編輯

2.3 my_qsort函數(shù)介紹

2.4 Swap函數(shù)

總結(jié)


?

1、qsort函數(shù)是什么

? ? ? ? qsort函數(shù)是c語(yǔ)言自帶的函數(shù),其功能是實(shí)現(xiàn)快速排序。我們來(lái)看一下他的參數(shù)和返回值:用冒泡排序?qū)崿F(xiàn)快速排序(qsort函數(shù)),指針進(jìn)階實(shí)例,c語(yǔ)言學(xué)習(xí),c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

? ? ? ? 以上就是qsort的參數(shù)和返回值,可以看到,其返回值是void也就是沒(méi)有返回值;而參數(shù)方面,包括:void* base 這是要排序的數(shù)據(jù)的起始位置的指針、 size_t num 待排序的數(shù)據(jù)元素個(gè)數(shù)、 size_y width 待排序數(shù)據(jù)元素的大?。▎挝皇亲止?jié))、 int(* cmp)(const void* e1,const void* e2) 函數(shù)指針變量,其指向一個(gè)返回值為int類型,參數(shù)為兩個(gè)void*的指針e1和e2,他們分別指向要排序數(shù)據(jù)的第一個(gè)元素和第二個(gè)元素。

? ? ? ? 看一個(gè)用qsort實(shí)現(xiàn)的排序:用冒泡排序?qū)崿F(xiàn)快速排序(qsort函數(shù)),指針進(jìn)階實(shí)例,c語(yǔ)言學(xué)習(xí),c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

? ? ? ? 我們需要自己定義一個(gè)cmp函數(shù),里面設(shè)計(jì)一個(gè)比較函數(shù),e1 和 e2 指向數(shù)據(jù)的前兩個(gè)元素,如果設(shè)計(jì)為:*e1大于*e2時(shí)返回正值;*e1等于*e2時(shí)返回0;*e1小于*e2時(shí)返回負(fù)值時(shí),qsort就會(huì)實(shí)現(xiàn)對(duì)數(shù)據(jù)的升序排列,反之,qsort就會(huì)實(shí)現(xiàn)降序排列。因此,我們發(fā)現(xiàn),qsort實(shí)現(xiàn)的功能其實(shí)取決于我們?nèi)绾稳ピO(shè)計(jì)cmp函數(shù)。此外,qsort可以比較不僅限于整型數(shù)據(jù)的大小,還可以比較字符串等等各種類型的大小,其規(guī)則和整型相同,都是取決于如何去設(shè)計(jì)cmp函數(shù)。

? ? ? ? 好了,講到這我們大致了解了qsort函數(shù),現(xiàn)在,我們將用冒泡排序去實(shí)現(xiàn)qsort的功能。這樣的練習(xí)有助于我們更好地了解和運(yùn)用指針,實(shí)現(xiàn)我們對(duì)c語(yǔ)言的進(jìn)階。

2、冒泡排序?qū)崿F(xiàn)快速排序

? ? ? ? 先看看最終代碼:

#include <stdio.h>

void my_qsort(void* base, int num, int width, int (*cmp)(const void* e1, const void* e2));
void Swap(char* e1, char* e2, int width);
int cmp(const void* e1, const void* e2);

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	my_qsort(arr,sz,sizeof(int),cmp);
	int i = 0;
	for (i = 0;i < sz;i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

void my_qsort(void* base, int num, int width, int (*cmp)(const void* e1, const void* e2))
{
	int i = 0;
	for (i = 0;i <num-1;i++)
	{
		int flag = 1;
		int j = 0;
		for (j = 0;j < num - 1 - i;j++)
		{
			if (cmp((char*)base + width * j, (char*)base + width * (j + 1)) < 0)
			{
				//交換
				Swap((char*)base + width * j, (char*)base + width * (j + 1),width);
			}
			
		}
	}
}

void Swap(char* e1, char* e2, int width)
{
	int i = 0;
	int c = 0;
	for (i = 0;i < width;i++)
	{
		c = *(e1 + i);
		*(e1 + i) = *(e2 + i);
		*(e2 + i) = c;
	}
}

int cmp(const void* e1, const void* e2)
{
	return *((int*)e1) - *((int*)e2);
}

效果:

用冒泡排序?qū)崿F(xiàn)快速排序(qsort函數(shù)),指針進(jìn)階實(shí)例,c語(yǔ)言學(xué)習(xí),c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

可見(jiàn)確實(shí)模擬出了qsort的效果。

一步步分析:

2.1 主函數(shù)

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	my_qsort(arr,sz,sizeof(int),cmp);
	int i = 0;
	for (i = 0;i < sz;i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

? ? ? ? 主函數(shù)主要是arr數(shù)組的定義,求其長(zhǎng)度sz,引用my_qsort函數(shù)和打印排序后的函數(shù)。沒(méi)有需要重點(diǎn)講的。

? ? ? ? 接下來(lái)介紹所運(yùn)用到的功能函數(shù):

2.2 功能函數(shù)聲明

????????這里包括了三個(gè)函數(shù),my_qsort就是用冒泡排序模擬實(shí)現(xiàn)qsort的函數(shù),Swap函數(shù)是用來(lái)交換e1和e2的函數(shù),cmp就是正常qsort中我們需要自己設(shè)定的函數(shù),可以通過(guò)改變cmp的內(nèi)容實(shí)現(xiàn)不同效果的排序。其中cmp在上面已經(jīng)介紹過(guò)了所以下面我只重點(diǎn)介紹my_qsort函數(shù)和Swap函數(shù)。

2.3 my_qsort函數(shù)介紹

用冒泡排序?qū)崿F(xiàn)快速排序(qsort函數(shù)),指針進(jìn)階實(shí)例,c語(yǔ)言學(xué)習(xí),c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

? ? ? ? 首先要明白,這個(gè)函數(shù)的主要思想其實(shí)是一個(gè)冒泡排序。只不過(guò)在正常冒泡排序的交換過(guò)程我們用了Swap函數(shù)代替。

? ? ? ? 重點(diǎn)來(lái)了,來(lái)看看其中這兩行的代碼:用冒泡排序?qū)崿F(xiàn)快速排序(qsort函數(shù)),指針進(jìn)階實(shí)例,c語(yǔ)言學(xué)習(xí),c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

????????這里我們將原本void類型的代碼轉(zhuǎn)化為了cahr*,這是因?yàn)?,我們模擬的qsort是一個(gè)可以對(duì)任何數(shù)據(jù)進(jìn)行排序的函數(shù),不僅限于int類型,所以,我們要想一個(gè)辦法能夠用指針去指向任意大小的數(shù)據(jù),我們考慮的就是char*類型,因?yàn)槲覀儌鲄⒌臅r(shí)候?qū)⒃氐拇笮idth傳了過(guò)來(lái),這樣,我們定義了char*類型的指針(1字節(jié)),只需要用i*width就可以指向后i個(gè)數(shù)據(jù);反之,如果不用char*類型的話,其他類型的指針步長(zhǎng)本身都不為1字節(jié),,這樣加上i無(wú)法確定指針指向了哪個(gè)數(shù)據(jù)。

? ? ? ? 下面,來(lái)講解一下Swap函數(shù):

2.4 Swap函數(shù)

用冒泡排序?qū)崿F(xiàn)快速排序(qsort函數(shù)),指針進(jìn)階實(shí)例,c語(yǔ)言學(xué)習(xí),c語(yǔ)言,開(kāi)發(fā)語(yǔ)言

? ? ? ? Swap函數(shù)實(shí)現(xiàn)的是大小為width的兩個(gè)元素的互換,由于我們指針e1和e2為char類型,所以,想要完全互換的話,需要對(duì)指針后width個(gè)內(nèi)容都進(jìn)行互換,因此我們寫了如此一個(gè)循環(huán)進(jìn)行互換。

總結(jié)

????????以上,就是用冒泡排序?qū)崿F(xiàn)qsort函數(shù)的模擬了,它不僅可以對(duì)整型數(shù)據(jù)進(jìn)行排序,還可以對(duì)任意類型數(shù)據(jù)進(jìn)行排序,其中運(yùn)用到了函數(shù)指針,也要求編程者對(duì)函數(shù)有一定深刻的理解。了解好原理,自己動(dòng)手去完成這樣一個(gè)函數(shù)模擬,我相信,你對(duì)指針的的理解會(huì)上升一個(gè)臺(tái)階。

?

到了這里,關(guān)于用冒泡排序?qū)崿F(xiàn)快速排序(qsort函數(shù)),指針進(jìn)階實(shí)例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 用代碼生擼qsort函數(shù)來(lái)實(shí)現(xiàn)冒泡排序

    用代碼生擼qsort函數(shù)來(lái)實(shí)現(xiàn)冒泡排序

    作者主頁(yè): paper jie的博客_CSDN博客-C語(yǔ)言,算法詳解領(lǐng)域博主 本文作者: 大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。 本文錄入于 《C語(yǔ)言》專欄,本專欄是針對(duì)于大學(xué)生,編程小白精心打造的。筆者用重金(時(shí)間和精力)打造,將C語(yǔ)言基礎(chǔ)知識(shí)一網(wǎng)打盡,希望可

    2024年02月09日
    瀏覽(23)
  • C語(yǔ)言-指針進(jìn)階-qsort函數(shù)的學(xué)習(xí)與模擬實(shí)現(xiàn)(9.3)

    C語(yǔ)言-指針進(jìn)階-qsort函數(shù)的學(xué)習(xí)與模擬實(shí)現(xiàn)(9.3)

    目錄 思維導(dǎo)圖: 回調(diào)函數(shù) qsort函數(shù)介紹 模擬實(shí)現(xiàn)qsort 寫在最后: 什么是回調(diào)函數(shù)? 回調(diào)函數(shù)是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù)。 將一個(gè)函數(shù)指針作為參數(shù)傳遞給一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用所指向函數(shù)時(shí), 我們就將此稱為回調(diào)函數(shù)。 在舉例之前,我們先學(xué)習(xí)一個(gè)C語(yǔ)言

    2024年02月15日
    瀏覽(18)
  • 【再識(shí)C進(jìn)階2(中)】詳細(xì)介紹指針的進(jìn)階——函數(shù)指針數(shù)組、回調(diào)函數(shù)、qsort函數(shù)

    【再識(shí)C進(jìn)階2(中)】詳細(xì)介紹指針的進(jìn)階——函數(shù)指針數(shù)組、回調(diào)函數(shù)、qsort函數(shù)

    ??作者簡(jiǎn)介: 加油,旭杏,目前大二,正在學(xué)習(xí) C++ , 數(shù)據(jù)結(jié)構(gòu) 等?? ??作者主頁(yè):加油,旭杏的主頁(yè)?? ?本文收錄在:再識(shí)C進(jìn)階的專欄?? ??代碼倉(cāng)庫(kù):旭日東升 1?? ??歡迎大家點(diǎn)贊 ?? 收藏 ? 加關(guān)注哦!???? ???????在這一篇博客中,我們要認(rèn)識(shí)并理解 函數(shù)指

    2024年02月09日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)進(jìn)階篇 之 【交換排序】(冒泡排序,快速排序遞歸、非遞歸實(shí)現(xiàn))詳細(xì)講解

    數(shù)據(jù)結(jié)構(gòu)進(jìn)階篇 之 【交換排序】(冒泡排序,快速排序遞歸、非遞歸實(shí)現(xiàn))詳細(xì)講解

    當(dāng)你覺(jué)的自己不行時(shí),你就走到斑馬線上,這樣你就會(huì)成為一個(gè)行人 1.1 基本思想 1.2 實(shí)現(xiàn)原理 1.3 代碼實(shí)現(xiàn) 1.4 冒泡排序的特性總結(jié) 2.1 基本思想 2.2 遞歸實(shí)現(xiàn) 2.2.1 hoare版 2.2.2 前后指針版本 2.3 快速排序優(yōu)化 2.3.1 隨機(jī)數(shù)選key 2.3.2 三數(shù)取中選key 2.3.3 遞歸到小的子區(qū)間使用插入排

    2024年04月10日
    瀏覽(20)
  • c語(yǔ)言用冒泡排序模擬實(shí)現(xiàn)qsort排序

    c語(yǔ)言用冒泡排序模擬實(shí)現(xiàn)qsort排序

    1、簡(jiǎn)單介紹冒泡排序 冒泡排序就是兩兩相鄰元素進(jìn)行比較,如果不滿足順序就進(jìn)行交換?,F(xiàn)有一組整數(shù),將其用冒泡排序?qū)崿F(xiàn)排序?yàn)樯颉?假設(shè)有這樣一組整數(shù):9 8 7 6 5? ? 由此可知,如果一個(gè)整型數(shù)組有num個(gè)元素,則需走num-1趟,若走在第i趟,則在第i趟內(nèi)需要比較num-1

    2024年02月15日
    瀏覽(22)
  • 還在使用冒泡排序遍歷數(shù)組?No No No 庫(kù)函數(shù)qsort幫你搞定所有排序還不快學(xué)起來(lái)!

    還在使用冒泡排序遍歷數(shù)組?No No No 庫(kù)函數(shù)qsort幫你搞定所有排序還不快學(xué)起來(lái)!

    ?? 鴿芷咕 :個(gè)人主頁(yè) ??? 個(gè)人專欄 :《C語(yǔ)言初階篇》 《C語(yǔ)言進(jìn)階篇》 ??生活的理想,就是為了理想的生活! ?? ?? hello! 各位寶子們大家好啊,剛開(kāi)始學(xué)編程的時(shí)候我們都是用冒泡來(lái)進(jìn)行排序的,今天給大家介紹一下新的排序方法庫(kù)函數(shù)qsort! ?? ?? sor英文原意是

    2024年02月14日
    瀏覽(25)
  • 【C語(yǔ)言】用冒泡排序?qū)崿F(xiàn)my_qsort

    【C語(yǔ)言】用冒泡排序?qū)崿F(xiàn)my_qsort

    大家好,我是蘇貝,本篇博客帶大家了解如何用冒泡排序?qū)崿F(xiàn)my_qsort,如果你覺(jué)得我寫的還不錯(cuò)的話,可以給我一個(gè)贊??嗎,感謝?? 用冒泡排序?qū)崿F(xiàn)my_qsort?你或許覺(jué)得沒(méi)有必要這樣做,有現(xiàn)成的qsort函數(shù),為什么還要自己寫一個(gè)呢?于我而言,它可以讓我對(duì)冒泡排序和q

    2024年02月07日
    瀏覽(23)
  • 【C語(yǔ)言】指針的進(jìn)階(二)—— 回調(diào)函數(shù)的講解以及qsort函數(shù)的使用方式

    【C語(yǔ)言】指針的進(jìn)階(二)—— 回調(diào)函數(shù)的講解以及qsort函數(shù)的使用方式

    目錄 1、函數(shù)指針數(shù)組 1.1、函數(shù)指針數(shù)組是什么? ?1.2、函數(shù)指針數(shù)組的用途:轉(zhuǎn)移表 2、擴(kuò)展:指向函數(shù)指針的數(shù)組的指針 3、回調(diào)函數(shù) 3.1、回調(diào)函數(shù)介紹 ?3.2、回調(diào)函數(shù)的案例:qsort函數(shù) 3.2.1、回顧冒泡排序 ?3.2.1、什么是qsort函數(shù)? 函數(shù)指針數(shù)組 是什么?首先主語(yǔ)是 數(shù)

    2024年02月07日
    瀏覽(23)
  • C語(yǔ)言快速排序——qsort函數(shù)

    C語(yǔ)言快速排序——qsort函數(shù)

    ? 上面的是我們標(biāo)準(zhǔn)C語(yǔ)言庫(kù)里面對(duì)qsort函數(shù)的介紹,我們先來(lái)從排序說(shuō)起:? 這就不得不提出編程中最最基礎(chǔ)的排序算法--- 冒泡排序? 對(duì)于一個(gè)任意的無(wú)序數(shù)列,我們?nèi)绻胍阉懦身樞驍?shù)列的話,我們就可以讓每一項(xiàng)跟后面的一項(xiàng)去比較,然后交換兩個(gè)數(shù),最終得到一個(gè)

    2024年01月22日
    瀏覽(21)
  • C語(yǔ)言 快速排序——qsort函數(shù)詳解

    ? ? ? ? 我們?cè)谑褂妹芭菖判蚍ㄗ鲱}的時(shí)候,經(jīng)常會(huì)遇到運(yùn)算次數(shù)過(guò)多程序超時(shí)的情況,而且冒泡排序法只能對(duì)整形數(shù)組進(jìn)行排序。 ? ? ? ? 為了解決這些問(wèn)題!就使用 qsort函數(shù) 吧! 目錄 一、qsort函數(shù)使用方法 二、qsort函數(shù)使用示例 ? ? ?1.數(shù)組排序 ? ? ?2.字符數(shù)組排序 ?

    2024年02月03日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包