1. 程式人生 > >【C語言】 使用回撥函式實現氣泡排序

【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