摘要:說明這個(gè)冒泡排序不僅適用于數(shù)組,同樣適用其它數(shù)組,結(jié)構(gòu)體等,因?yàn)楹瘮?shù)中是一個(gè)一個(gè)字節(jié)進(jìn)行交換的。
回調(diào)函數(shù)是指在執(zhí)行一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù),直接貼代碼:
#include
#include
#include
#include
using namespace std;
int cmp_int(const void* e1, const void*e2)
{
?? ?return *(int*)e1 - *(int*)e2;
}
void print_arr(int arr[], int sz)
{
?? ?int i = 0;
?? ?for (i = 0; i < sz; i++)
?? ?{
?? ??? ?printf("%d ", arr[i]);
?? ?}
}
void Swap(char* buf1, char* buf2, int width)
{
?? ?int i = 0;
?? ?for (i = 0; i < width; i++)
?? ?{
?? ??? ?char tmp = *buf1;
?? ??? ?*buf1 = *buf2;
?? ??? ?*buf2 = tmp;
?? ??? ?buf1++;
?? ??? ?buf2++;
?? ?}
}
void BubbleSort(void* base, size_t num, size_t width, int (*cmp)(const void*, const void*))
{
?? ?size_t i = 0;
?? ?//趟數(shù)
?? ?for (i = 0; i < num - 1; i++)
?? ?{
?? ??? ?//比較的對數(shù)
?? ??? ?size_t j = 0;
?? ??? ?for (j = 0; j < num - 1 - i; j++)
?? ??? ?{
?? ??? ??? ?//base[j] ==> *(base+j)
?? ??? ??? ?if (cmp((char*)base+j*width, (char*)base+(j+1)*width)>0)
?? ??? ??? ?{
?? ??? ??? ??? ?//交換
?? ??? ??? ??? ?Swap((char*)base + j * width, (char*)base + (j + 1) * width, width);
?? ??? ??? ?}
?? ??? ?}
?? ?}
}
void test3()
{
?? ?int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
?? ?int sz = sizeof(arr) / sizeof(arr[0]);
?? ?BubbleSort(arr, sz, sizeof(arr[0]), cmp_int);
?? ?//打印
?? ?print_arr(arr, sz);
}
int main()
{
?? ?test3();
}
main()函數(shù)調(diào)用test3(),test3()又調(diào)用?BubbleSort()函數(shù),而本文中?BubbleSort函數(shù)相對復(fù)雜,類似于qsort函數(shù),進(jìn)行冒泡排序,傳入的四個(gè)參數(shù)分別為首地址,數(shù)組元素個(gè)數(shù),單個(gè)數(shù)組元素個(gè)數(shù),交換函數(shù),BubbleSort()函數(shù)中又會(huì)調(diào)用Swap函數(shù),Swap函數(shù)進(jìn)行的是字節(jié)交換,所以強(qiáng)制類型轉(zhuǎn)換為char型,方便一個(gè)一個(gè)字節(jié)交換,最后Swap函數(shù)又調(diào)用print_arr函數(shù),打印出數(shù)組。
說明:這個(gè)冒泡排序不僅適用于int數(shù)組,同樣適用其它數(shù)組,結(jié)構(gòu)體等,因?yàn)閟wap函數(shù)中是一個(gè)一個(gè)字節(jié)進(jìn)行交換的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/119010.html
摘要:在閱讀本文之后你能了解怎樣使用回調(diào)函數(shù)。這是中回調(diào)函數(shù)的典型用法,它在中廣泛被使用。這意味著回調(diào)函數(shù)本質(zhì)上是一個(gè)閉包。使用命名或匿名函數(shù)作為回調(diào)在前面的例子以及的例子中,我們使用了再參數(shù)位置定義的匿名函數(shù)作為回調(diào)函數(shù)。 轉(zhuǎn)自:張小俊128:http://www.html-js.com/articl..._luxiao:http://luxiao1223.blog.51cto.... j...
摘要:回調(diào)定義剛開始學(xué)習(xí)時(shí),對回調(diào)函數(shù)的理解僅僅停留在知道定義階段。什么是回調(diào)函數(shù)就是將一個(gè)函數(shù)作為參數(shù)傳遞給另一個(gè)函數(shù),作為參數(shù)的這個(gè)函數(shù)就是回調(diào)函數(shù)。參考文章詳解回調(diào)函數(shù)以為例解讀異步回調(diào)和異步編程的種方法阮一峰的網(wǎng)絡(luò)日志 回調(diào)定義 剛開始學(xué)習(xí)javascript時(shí),對回調(diào)函數(shù)的理解僅僅停留在知道定義階段。什么是回調(diào)函數(shù)? 就是將一個(gè)函數(shù)作為參數(shù)傳遞給另一個(gè)函數(shù),作為參數(shù)的這個(gè)函數(shù)就是回...
摘要:回調(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對該事件或條件進(jìn)行響應(yīng)。若是使用回調(diào)函數(shù)進(jìn)行處理,代碼就可以繼續(xù)進(jìn)行其他任務(wù),而無需空等。參考理解回調(diào)函數(shù)理解與使用中的回調(diào)函數(shù)這篇相當(dāng)不錯(cuò)回調(diào)函數(shù) 為什么寫回調(diào)函數(shù) 對于javascript中回調(diào)函數(shù) 一直處于理解,但是應(yīng)用不好的階段,總是在別人家的代碼中看到很巧妙的回調(diào),那時(shí)候會(huì)有wow c...
摘要:如果你把函數(shù)的指針地址作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來調(diào)用其所指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)。回調(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對該事件或條件進(jìn)行響應(yīng)。 同期異步系列文章推薦談一談javascript異步j(luò)avascript異步與promisejavascript異步之Promise.all()、Promise.ra...
摘要:中文文檔簡單說,對象就是的回調(diào)函數(shù)解決方案。為了讓回調(diào)函數(shù)的名字統(tǒng)一,便于在中使用。普通操作的回調(diào)函數(shù)接口對象的最大優(yōu)點(diǎn),就是它把這一套回調(diào)函數(shù)接口,從操作擴(kuò)展到了所有操作。指定操作成功時(shí)的回調(diào)函數(shù)。 參考鏈接 jQuery API中文文檔 jQuery.Deferred jQuery.when jQuery的deferred對象詳解 jQuery deferred 對象的 prom...
javascript -- 回調(diào)函數(shù) 在高級語言層出不窮的年代, 各個(gè)語言都號稱有著一切皆為對象的自豪說法, 而 js 作為一門腳本語言卻相對于java等傳統(tǒng)面向?qū)ο笳Z言有很大的不同之處, 除了 js 詭異的繼承體系之外, 最令人著迷的一個(gè)特性就是回調(diào)函數(shù), 當(dāng)然也有很多人對他詬病, 筆者認(rèn)為 回調(diào)函數(shù) 和 異步 是js語言特性的兩大最為突出的店, 當(dāng)然正如所有優(yōu)點(diǎn)需要滿足自我的需求, 這個(gè)世界...
閱讀 1074·2021-11-24 09:39
閱讀 1306·2021-11-18 13:18
閱讀 2425·2021-11-15 11:38
閱讀 1824·2021-09-26 09:47
閱讀 1625·2021-09-22 15:09
閱讀 1624·2021-09-03 10:29
閱讀 1510·2019-08-29 17:28
閱讀 2951·2019-08-29 16:30