【C語言】 使用回撥函式實現氣泡排序
實現功能:既能排序整型數,也可以排序字串 程式碼如下: #include <stdio.h> #include <string.h> int int_cmp(const void *p1, const void *p2) { if (*(int *)p1 > *(int *)p2) { return 1; } else if (*(int *)p1 == *(int *)p2) { return 0; } else { return -1; } } 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)(const void *, const 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 +size*j,(char *)base+size*(j+1))>0) { swap((char *)base + size*j, (char *)base + size*(j + 1), size); } } } } int str_cmp(const void *p1, const void *p2) { return strcmp((char *)(*(int *)p1), (char *)(*(int *)p2)); } int main() { //int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 }; char *arr[] = { "dddd", "bbbb", "cccc", "aaaa" }; int i = 0; bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(char *), str_cmp); for (i = 0; i < 4; i++) { printf("%s\n", arr[i]); } printf("\n"); return 0; }
本文出自 “Vs呂小布” 部落格,謝絕轉載!
相關推薦
【C語言】 使用回撥函式實現氣泡排序
實現功能:既能排序整型數,也可以排序字串 程式碼如下: #include <stdio.h> #include <string.h> int int_cmp(const v
用回撥函式實現氣泡排序
(一)什麼是回撥函式呢? 答:回撥函式就是通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用為呼叫它所指向的函式時,我們就說這是回撥函式。 (二)回撥函式的實現機制 1.定義一個回撥函式 2.提供函式實現的一方在初始化時。將回調函式的
【c語言】利用指標模式實現字串函式(strlen、strcat、strstr、strcpy、strcmp、memcpy、memove)
模擬實現strlen int my_strlen(const char *p) { assert(p != NULL); char *s = p; while (*p) { p++; } r
【C語言】自己編寫程式實現strrchr函式,即在給定字串中找特定的字元並返回最後出現的位置
//自己編寫程式實現strrchr函式,即在給定字串中找特定的字元並返回最後出現的位置 #include <stdio.h> #include <string.h> char
【C語言】自己編寫程式實現strchr函式。即在給定字串中找特定的字元並返回該處指標。
<pre name="code" class="cpp">//自己編寫程式實現strchr函式。即在給定字串中找特定的字元並返回該處指標。 #include <stdio.h>
【C語言】編寫一個函式,實現兩個數的交換 詳細解答
今天在用函式寫兩數交換的時候發現有點小挫折,然後經過多次查詢驗證才發現是因為地址不對的緣故,我在此放出兩種交換的方法,先發錯誤的如下:#include <stdio.h> void swap(int a,int b) { int temp=a; a
【C語言】記憶體分配函式malloc/ calloc/ realloc及記憶體釋放free
前言: 記憶體區域劃分與分配: 1、棧區(stack)——程式執行時由編譯器自動分配,存放函式的引數值,區域性變數的值等,程式結束時由編譯器自動釋放。 2、堆區(heap) —— 在記憶體開闢另一塊儲存區域。一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可
【c語言】指向指標(函式)的指標學習
1.指向指標指標的指標 定義形式:[儲存型別] 型別名 **指標名; int **p1; int *p2; int i=3; p2=&i; p1=&p2; **p1=5; 解析圖 把i的地址賦給p2,再把p2的地址賦給p1,p1---->p2------
【C語言】巨集和函式的區別
由之前的巨集的引入我們知道,巨集函式可以完成一些簡單的運算。那是不是巨集函式就可以取代函式呢?巨集函式和函式到底有哪些區別呢? 下面我們來分析他們其中的區別。 1.程式碼長度: 對於巨集,每次使用時,巨集程式碼都被插入到程式中。除了非常小的巨集之外,程式的長度將大幅度增
【C語言】單鏈表的實現
單鏈表 單鏈表是一種鏈式存取的資料結構,用一組地址任意的儲存單元存放線性表中的資料元素。 單鏈表結構如下: typedef int DataType; typedef struct Node { struct Node* next; /
【C語言】判斷素數函式
//方法一:2~m-1有沒有能整除的 int prime(int m) { int i; if(m==0) return 0; if(m==1) return 0;//考慮0和1的情況 for
【C語言】I/O函式
1.錯誤報告函式 1)strerror 通過標準錯誤的標號,獲得錯誤的描述字串 ,將單純的錯誤標號轉為字串描述,方便使用者查詢錯誤,但是使用不夠方便。 2)perror 函式原型:void perror(const char *s); perror( ) 用來
【C語言】編寫一個函式,將一個數字字串轉換成這個字串對應的數字(包括正浮點數、負浮點數)
//編寫一個函式,將一個數字字串轉換成這個字串對應的數字(包括正浮點數、負浮點數) //例如:“12.34“ 返回12.34. " -12.34" 返回12.34 #include<
【C語言】利用選擇法進行從小到大排序
選擇法思路: 取其中的最大值與最後一個數進行交換 假設一共有6個數組,我們用選擇法進行從小到大的排序; 6,5,4,2,3,1 第一次: 【6,5,4,2,3,1】->> 【1,5,4,2,3,6】 第二次:【1,5,4,2,3】,6 ->>【1
【C/C++】用回撥函式實現計算器
一、問題概述 用C語言實現一個簡易計算器,可以用來實現加減乘除的功能 名詞解釋: 函式指標:一個指標,用於指向一個函式 函式指標陣列:是一個數組,裡面存放多個函式指標 回撥函式:一個函式,若引數中有函式指標,那麼這個函式便是回撥函式 二、問題分析 這個問題大可用switc
26、【支付模組開發】——支付寶回撥函式實現和查詢使用者訂單狀態介面編寫
####1、支付寶回撥函式實現 我們在除錯支付寶沙箱環境的時候,支護寶會有一個回撥函式,也就是在支付成功之後,可以呼叫我們支付之後需要執行的相關方法,從而達到資料庫的資料和我們的操作相統一。 首先我們先在本地將回調函式編寫好~ 在OrderController類中新建我們的支付寶回撥函式
【cocos2d-x從c++到js】回撥函式1——按鍵回撥
回撥函式是介面互動和接入各種第三方SDK的關鍵所在,因為回撥函式的C++程式碼是不能自動生成的,一切的一切,都需要手寫完成。 比較不錯的是,Cocos2d-x引擎對於回撥函式提供了完整的包裝機制。我們所需要做的就是了解這個機制,並使用他。學習引擎自己的程式碼
【C語言】字串函式的實現
求字串的長度 strlen 長度不受限制的字串函式 strcpy strcat strcmp 長度受限制的字串函式 strncpy strncat strncmp 字串查詢 strc
【C語言】模擬實現strchr函式.即在一個字串中查詢一個字元第一次出現的位置並返回
//模擬實現strchr函式.即在一個字串中查詢一個字元第一次出現的位置並返回 #include <stdio.h> //#include <string.h> #includ
【C語言】使用可變引數,實現函式,求函式引數的最大值。
求若干個引數的最大值,我們假定第一個可變引數為最大值,定義為max,將之後的每一個可變引數和第一個可變引數相比較,始終在max裡存放的是最大值。 但是這裡需要注意,每一次呼叫va_arg,都會指向下一個可變引數,因此我們需要將其值儲存在臨時變數裡,以防指向錯誤。 #includ