国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

可對多種類型進(jìn)行排序的冒泡排序

2019-11-08 03:11:26
字體:
供稿:網(wǎng)友

實(shí)現(xiàn)一個(gè)bubble_sort(冒泡排序),可以完成不同類型數(shù)據(jù)的排序

需要借助庫函數(shù)qsort 的思想去實(shí)現(xiàn)!

先完成函數(shù)原型:void bubble_sort(void* base, size_t num, size_t width, int(*compare)(const void* a, const void* b));

該函數(shù)的四個(gè)參數(shù)和qsort 的四個(gè)參數(shù)使用方法相同(如不清楚可參考我的上一篇對qsort詳細(xì)介紹的博客);

同時(shí)需要完成比較函數(shù),即第四個(gè)參數(shù)函數(shù)指針。

例(對整數(shù)的排序):

實(shí)現(xiàn)對整數(shù)的比較,

int  IntCmp(const void* a, const void* b)           //比較整型a,b的大小 {return (*(int*)a>*(int*)b) ? 1 : -1;}

然后在void bubble_sort(void* base, size_t num, size_t width, int(*compare)(const void* a, const void* b))函數(shù)內(nèi)部按照一般的冒泡排序思路編程即可,

注意的是該函數(shù)在進(jìn)行交換元素的時(shí)候以字節(jié)為單位進(jìn)行交換;

交換函數(shù)如下:

void swap(size_t width, void* a, void* b)           //按字節(jié)將兩任意類型交換 {char temp;int k = 0;for (k = 0; k<(int)width; k++){temp = *((char*)a + k);*((char*)a + k) = *((char*)b + k);*((char*)b + k) = temp;}}

具體思路如上,我以整型排序和字符串?dāng)?shù)組的排序?yàn)槔瓿闪艘韵麓a:

#include<stdio.h>#include<string.h>int IntCmp(const void* a, const void* b)           //比較整型a,b的大小 {	return (*(int*)a>*(int*)b) ? 1 : -1;}int StrCmp(const void* a, const void* b)           //比較字符串?dāng)?shù)組(可理解為二級指針)的大小 {	return strcmp((char*)(*(int*)a), (char*)(*(int*)b))>0 ? 1 : -1;}void swap(size_t width, void* a, void* b)           //按字節(jié)將兩任意類型交換 {	char temp;	int k = 0;	for (k = 0; k<(int)width; k++)	{		temp = *((char*)a + k);		*((char*)a + k) = *((char*)b + k);		*((char*)b + k) = temp;	}}void bubble_sort(void* base, size_t num, size_t width, int(*compare)(const void* a, const void* b)){                  	int i = 0;	int j = 0;	int ret = 0;	for (i = 0; i<(int)num - 1; i++)	{		for (j = 0; j<(int)num - i - 1; j++)		{			ret = compare(((char*)base + j*width), ((char*)base + (j + 1)*width));  //前面數(shù)據(jù)大返回1,否則返回-1 			if (ret>0)          //將大的數(shù)據(jù)換到后面 			{				swap(width, ((char*)base + j*width), ((char*)base + (j + 1)*width));			}		}	}}int main(){	int i=0;	int arr1[10]={1,3,5,7,9,2,4,6,8,10};	int len=sizeof(arr1)/sizeof(arr1[0]);	bubble_sort(arr1,len,sizeof(arr1[0]),IntCmp);	for(i=0;i<len;i++)	{		PRintf("%d ",arr1[i]);	}	/*int i = 0;	char* arr[4] = { "aaa", "ddd", "ccc", "bbb" };	int len = sizeof(arr) / sizeof(arr[0]);	bubble_sort(arr, len, sizeof(arr[0]), StrCmp);	for (i = 0; i<len; i++)	{		printf("%s ", arr[i]);	}*/	return 0;}整型排序結(jié)果:

字符串?dāng)?shù)組(二維數(shù)組)排序結(jié)果:


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 武陟县| 德清县| 门头沟区| 元氏县| 婺源县| 嘉黎县| 赞皇县| 乌兰浩特市| 邹城市| 怀柔区| 特克斯县| 元氏县| 板桥市| 棋牌| 焉耆| 徐汇区| 封丘县| 抚宁县| 耒阳市| 新绛县| 眉山市| 天祝| 云霄县| 称多县| 海原县| 白银市| 延寿县| 平顶山市| 安塞县| 甘谷县| 九江县| 颍上县| 松江区| 江陵县| 芷江| 五大连池市| 伽师县| 松原市| 长沙市| 澄江县| 米林县|