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

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

這篇具有很好參考價值的文章主要介紹了還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

?? 鴿芷咕:個人主頁

??? 個人專欄:《C語言初階篇》 《C語言進階篇》
??生活的理想,就是為了理想的生活!

前言

?? ??hello! 各位寶子們大家好啊,剛開始學(xué)編程的時候我們都是用冒泡來進行排序的,今天給大家介紹一下新的排序方法庫函數(shù)qsort!
?? ??sor英文原意是排序的意思,而qsort的q是quick的縮寫快速的意思!那么庫函數(shù)qsort的意思就不言而喻了吧?快速排序!
?? ??本期文章收錄在《C語言初階篇》 ,大家有興趣可以看看吶
???? 歡迎鐵汁們 ?? 點贊 ?? 收藏 ?留言 ??!

?? 庫函數(shù)qsort的介紹

????在介紹庫函數(shù)qsort之前我們先來回顧下冒泡排序。

  • ?? 有一組整數(shù)數(shù)據(jù)要排為升序,該怎么做?
    • ?? 用倆倆相鄰的元素進行比較
    • ?? 如果不滿足就進行交換,這是冒泡排序的核心思想!
    • ?? 我們來用代碼寫一下看看。

?? 代碼演示:

#include <stdio.h>
void bubble_sort(int arr[], int sz)
{
	int i = 0;
	//趟數(shù)
	for (i = 0; i < sz - 1; i++)
	{
		//一趟比較
		//兩兩相鄰元素比較
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}
int main()
{
	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

?? 但是:冒泡排序只能排序整數(shù),像浮點數(shù)、字符、結(jié)構(gòu)體都排序不了!

???? 而我們的庫函數(shù)qsort就不一樣了,所有數(shù)據(jù)類型都可以排序這點是不是比冒泡排序強太多了?我們先來看看在C語言官網(wǎng)上qsort的描述。
還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言
? 大部分人肯看到這個參數(shù)可能就會想怎么這么復(fù)雜?其實沒有什么難的我們來一起看一下慢慢來你就會徹底明白這些是什么意思?

  • 信息一: 在使用qsort之前得先引用他的頭文件<stdlib.h>
  • 信息二: 它需要接收4個參數(shù)
  • 信息三: 這個庫函數(shù)沒有返回值+++

這就就是我們暫時獲得的信息,而我們知道要調(diào)用函數(shù)得給它傳值那么接下來,就來研究一下啊,qsort函數(shù)的參數(shù)

?? 庫函數(shù)qsort的參數(shù)介紹

還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

上面是C語言官網(wǎng)上對qsort的四個參數(shù)描述,看起來很復(fù)雜是吧其實非常簡單我們來把函數(shù)原型寫出來對照一下,看下每個參數(shù)的含義是什么:

void qsort(void* base, //指向了需要排序的數(shù)組的第一個元素
           size_t num, //排序的元素個數(shù)
           size_t size,//一個元素的大小,單位是字節(jié)
           int (*cmp)(const void*, const void*)
           //函數(shù)指針類型 - 這個函數(shù)指針指向的函數(shù),能夠比較base指向數(shù)組中的兩個元素
          );

?? 參數(shù)一 (void* base)

?? 看下一下官方文檔中的參數(shù)描述:

  • v o i d ? b a s e void* base void?base 是什么意思:
    還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

?? 這里說指向要排序的的第一對象的指針轉(zhuǎn)為, void* 空指針類型

  • 其實意思就是我們需要給他傳一個
  • 指向要排序的對象的第一個元素的指針
  • 它會自動轉(zhuǎn)換為空指針類型

?? 參數(shù)二 (size_t num)

?? 看下一下官方文檔中的參數(shù)描述:

  • size_t num 是什么意思:
    還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

?? 這里意思是:base指向的數(shù)組空間里元素的個數(shù), size_t 是一個無符號整形的數(shù)!

  • 其實意思就是我們需要給他傳一個
  • base指向數(shù)組空間里元素的個數(shù)
  • 它會自動轉(zhuǎn)換為一個無符號整形

?? 注:我們知道無符號整數(shù)沒有符號位,所以它永遠(yuǎn)表示的都是正數(shù)。而元素個數(shù)也都是正數(shù)不能是負(fù)數(shù)所以這里會轉(zhuǎn)換為size_t類型。

?? 參數(shù)三 (size_t size)

?? 看下一下官方文檔中的參數(shù)描述:

  • size_t size 是什么意思:
    還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

?? 這里意思是:base指向的數(shù)組里每元素的大小, size_t 是一個無符號整形的數(shù)!

  • 其實意思就是我們需要給他傳一個
  • base指向的數(shù)組里每元素的類型大小,是多少字節(jié)!
  • 它會自動轉(zhuǎn)換為一個無符號整形

?? 注:和前面一樣,數(shù)據(jù)類型的大小也永遠(yuǎn)是正數(shù),所以我們把它轉(zhuǎn)換為size_t類型是不是合適些!

?? 參數(shù)四 (int (cmp)(const void, const void*))

?? 看下一下官方文檔中的參數(shù)描述:

  • (int (cmp)(const void, const void*) 是什么意思:
    還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

?? 這里意思是:參數(shù)四需要一個函數(shù)指針類型的參數(shù),做為比較函數(shù)傳給它!

也就是我們需要自己寫一個比較函數(shù)然后把地址傳給參數(shù)四
int compar (const void* p1, const void* p2);

  • 需要的參數(shù)是Zvoid* 的類型的大家想
  • 是不是這樣就可以接收所有的數(shù)據(jù)類型了

這個函數(shù)需要完成的功能是

  • 指針變量p1 和 指針變量p2 比較。
  • 如果p1<p2就返回小于0的數(shù)
  • 如果p1= p2就返回0
  • 如果p1>p2就返回大于0的數(shù)

??(void *)指針講解

void我們都知道是一個空類型的意思,void 就是無類型的指針 :*

  • 無具體類型的指針,可以說他為通用類型指針
  • 但是這種類型的指針是不能夠直接進行解引用操作的
  • 由于類型是空類型所以也不能進行指針運算
  • 因為既然他是個空類型那么我們 + - 是該跳過多少字節(jié)呢?

??示例一:
還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

????這里就就可以看出一旦指針類型不同是不可以接收不同類型的地址的!

  • 而用 void* 類型的指針就不會出現(xiàn)這種情況

??示例二:
還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

?? (void* )類型的指針該如何使用

????前面說了這種指針既不能直接解引用,又不能進行指針運算那么我們該怎么使用void*類型的指針呢?

  • ?? 其實void*類型的指針在使用的時候需要強制轉(zhuǎn)換一下就好了!
  • ?? 這樣這個空指針類型不就有類型了(我們強制轉(zhuǎn)換的類型)
  • ?? 那么指針的運算不也解決了?因為有類型了就可以知道
  • ?? 加一步我們可以跳過多少字節(jié)

??圖片展示:
還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

?? qsort應(yīng)用實例

?? qsort應(yīng)用實例排序整形

????好了各位寶子們!前面的知識我們掌握就可以來實踐一下這個庫函數(shù)是不是真的有那么神奇,相信很多人已經(jīng)迫不及待了吧!

?? 代碼演示:

#include <stdio.h>
#include <stdlib.h>
int compar(const void* p1,const void* p2)
{
	return (*((int*)p1) - *((int*)p2));
}
void print(int* arr, int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
}
int main()
{
	int arr[] = { 8,6,9,7,6,1,2,4,5,3,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);	
	//排序
	qsort(arr, sz, sizeof(arr[0]), compar);
	//打印
	print(arr, sz);
	return 0;
	
}

這里我們就進行了整形數(shù)組排序,前三個參數(shù)很簡單就不講:

  • 第四個參數(shù)我們說了,需要一個比較函數(shù)的地址傳給他
  • 而函數(shù)名就是地址,也可以寫取地址&加函數(shù)名

那么我們就造一個比較函數(shù)出來就行

  • 整形剛好用一個數(shù)減另一個整形
  • 如果大于0第一個數(shù)就大些
  • 小于0就說明第一個參數(shù)小些
  • 剛好滿足要求!

?? 代碼結(jié)果:
還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

?? qsort應(yīng)用實例排序字符

????同理字符前面三個參數(shù)也一樣就比較函數(shù)需要改動,而字符的比較直接用strcmp這個函數(shù)就可以了!

?? 代碼演示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compar(const void* p1,const void* p2)
{
	return strcmp((char*)p1,(char*)p2);
}
void print(char* arr, int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%c ", arr[i]);
	}
}
int main()
{
	char arr[] = { 'c','a','f','d','B','A','C','D'};
	int sz = sizeof(arr) / sizeof(arr[0]);	
	//排序
	qsort(arr, sz, sizeof(arr[0]), compar);
	//打印
	print(arr, sz);
	return 0;
	
}

?? 代碼結(jié)果:

還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

?? qsort應(yīng)用實例排序結(jié)構(gòu)體

????同理字符前面三個參數(shù)也一樣就比較函數(shù)需要改動,而字符的比較直接用strcmp這個函數(shù)就可以了!

  • 這里幾不給大家打印出來看了,給大家看一下監(jiān)視就可以看出來是否排序了

?? 代碼演示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Stu
{
	char  arr[20];
	int	  age;
};
int compar_by_age(const void* p1,const void* p2)
{
	return (((struct Stu*)p1)->age-((struct Stu*)p2)->age);
}


int main()
{
	struct Stu  arr[] = { {"zhangsan",30},{"lisi",70},{"wangwu",10} };
	int sz = sizeof(arr) / sizeof(arr[0]);	
	//排序
	qsort(arr, sz, sizeof(arr[0]), compar_by_age);
	return 0;
	
}

?? 代碼結(jié)果:
還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言

總結(jié)

? 歸納:
好了以上就是關(guān)于 庫函數(shù) qsort 快速排序函數(shù) 的用法就全部講解完畢啦!
??庫函數(shù) qsort的介紹
??庫函數(shù) qsort 參數(shù)一
??庫函數(shù) qsort 參數(shù)二
??庫函數(shù) qsort參數(shù)三
??庫函數(shù) qsort參數(shù)四
??庫函數(shù) qsort的應(yīng)用
?? 把本章的內(nèi)容全部掌握,鐵汁們就可以熟練應(yīng)用qsort排序各種各樣的數(shù)據(jù)啦!
看到這里了還不給博主扣個:
?? 點贊??收藏 ?? 關(guān)注!

?? ?? ?? ?? ???? ?? ?? ?? ?? ??
拜托拜托這個真的很重要!
你們的點贊就是博主更新最大的動力!
有問題可以評論或者私信呢秒回哦。
還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!,《C語言進階篇》,算法,排序算法,開發(fā)語言,c語言文章來源地址http://www.zghlxwxcb.cn/news/detail-625784.html

到了這里,關(guān)于還在使用冒泡排序遍歷數(shù)組?No No No 庫函數(shù)qsort幫你搞定所有排序還不快學(xué)起來!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

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

    2024年02月09日
    瀏覽(23)
  • 【C語言】——指針六:冒泡排序與qsort函數(shù)的實現(xiàn)

    【C語言】——指針六:冒泡排序與qsort函數(shù)的實現(xiàn)

    1.1、冒泡排序的原理 ?? ??在實踐過程中,我們難免會碰到要給一組數(shù)據(jù)排序的情況。如果我們掌握一些排序的算法,效率就會高很多。排序的方法有方法有很多,如:希爾排序,快速排序,堆排序……,今天,我們講的排序方法就是—— 冒泡排序 ! ?? ??冒泡排序

    2024年04月16日
    瀏覽(25)
  • C語言題目 - 調(diào)用qsort函數(shù)對數(shù)組進行排序

    如題 其實沒什么難的,只要嚴(yán)格按照 qsort 函數(shù)的參數(shù)來填充即可,這里要用到 函數(shù)指針 。 qsort 函數(shù)的原型如下: void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *)); 參數(shù)說明: base :指向需要排序的數(shù)組的指針,數(shù)組中每個元素的大小應(yīng)為 size 字節(jié)。

    2024年02月11日
    瀏覽(21)
  • c---冒泡排序模擬qsort

    c---冒泡排序模擬qsort

    冒泡排序 冒泡排序原理:兩兩相鄰元素進行比較 初級版 這是冒泡排序初級版,不管其原內(nèi)容是否有序都會進行比較,如果原內(nèi)容原本就是有序的,再每個都進行比較效率就會低下,那么這時候可以改進一下,想一個標(biāo)記變量來記錄是否有序,如int falg = 0; 如果無序的情況下

    2024年01月18日
    瀏覽(18)
  • c語言用冒泡排序模擬實現(xiàn)qsort排序

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

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

    2024年02月15日
    瀏覽(22)
  • JavaScript函數(shù)變量的生命周期,自執(zhí)行函數(shù)、閉包、反轉(zhuǎn)數(shù)組案例及冒泡排序案例

    JavaScript函數(shù)變量的生命周期,自執(zhí)行函數(shù)、閉包、反轉(zhuǎn)數(shù)組案例及冒泡排序案例

    一、變量的生命周期 JavaScript 變量的生命期從它們被聲明的時間開始。 局部變量會在函數(shù)運行以后被刪除。 全局變量會在頁面關(guān)閉后被刪除。 二、自執(zhí)行函數(shù) 執(zhí)行函數(shù)通常都是定義之后立即執(zhí)行,以后都不再會調(diào)用,所以聲明時可以省略函數(shù)名,因此自執(zhí)行函數(shù)又叫匿名函

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

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

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

    2024年02月07日
    瀏覽(23)
  • 【C語言】回調(diào)函數(shù),qsort排序函數(shù)的使用和自己實現(xiàn),超詳解

    【C語言】回調(diào)函數(shù),qsort排序函數(shù)的使用和自己實現(xiàn),超詳解

    先記錄一下訪問量突破2000啦,謝謝大家支持!??! 這里是上期指針進階鏈接,方便大家查看:添加鏈接描述 大家好呀,今天分享一下上期指針進階中剩余的內(nèi)容——回調(diào)函數(shù),這個很重要滴,讓我們一起來學(xué)會學(xué)懂他吧?。?! 標(biāo)準(zhǔn)概念: 回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)

    2024年02月12日
    瀏覽(25)
  • 湘大 XTU OJ 1097 排序 題解:c++ 函數(shù)庫的使用 快速排序 歸并排序 冒泡排序

    湘大 XTU OJ 1097 排序 題解:c++ 函數(shù)庫的使用 快速排序 歸并排序 冒泡排序

    1097 排序 Description N個整數(shù),將其排序輸出。 輸入 第一行是一個整數(shù)K(1=K=20),表示有多少個樣例, 每個樣例的第一行是一個整數(shù)N(1=N=1,000) 和一個字符X,X為A時表示升序排序,為D時為降序排列;第二行為N個整數(shù),每個整數(shù)都可以使用int表示, 每個之間用一個空格隔開。

    2024年02月13日
    瀏覽(28)
  • C語言快速排序——qsort函數(shù)

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

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

    2024年01月22日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包