冒泡排序既可以排字符串也可以排字符串

    编写一个冒泡排序,既可以编写字符串也可以编写数字。

1).需要实现一个函数指针,在排序的时候将函数的入口地址传进来。

    
    void sort(void *base, int len, int width, int(*cmp)(const void*, const void*))
    {
        assert(base);
    	int i = 0;
    	int j = 0;
    	for (i = 0; i < len; i++)
    	{
    		for (j = 0; j < len - 1 - j; j++)
    		{
    			if (cmp((char *)base + width*j, (char *)base + width*(j + 1))>0)
    			{
    				swap((char *)base + width*j, (char *)base + width*(j + 1), width);
    			}
    		}
    	}
    }

实现代码的主逻辑

    1).参数设置,一个可以接收任何类型的指针,数据大小,类型大小,函数声明。

    2).需要实现一个比较字符串函数,整型比较函数,交换函数。

    比较字符串函数   

        
    int str_cmp(const void *p1, const void *p2)
    {
        assert(p1);
        assert(p2);
    	return strcmp((char *)(*(int *)p1), (char *)(*(int *)p2));
    }

比较整型的函数

    
    int int_cmp(const void *p1, const void *p2)
    {
        assert(p1);
        assert(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)
    {
        assert(p1);
        assert(p2);
    	int i = 0;
    	for (i = 0; i < size; i++)
    	{
    		char tmp = *((char *)p1 + i);
    		*((char *)p1 + i) = *((char *)p2 + i);
    		*((char *)p2 + i) = tmp;
    	}
    }

当需要比较字符串的时候,传参的时候需要将str_cmp传进来。同理需要比较整型数字,需要将int_cmp传进来,请注意函数参数。

   以上就是本人在学习过程中的一些经验总结。当然,本人能力有限,难免会有纰漏,希望大家可以指正。

时间: 2024-12-17 21:45:26

冒泡排序既可以排字符串也可以排字符串的相关文章

输入5个学生的名字(英文),使用冒泡排序按从大到小排序。 提示:涉及到字符串数组,一个字符串是一个一维字符数组;一个 字符串数组就是一个二维字符数组。

#include <stdio.h>#include <string.h> /*输入5个学生的名字(英文),使用冒泡排序按从大到小排序.提示:涉及到字符串数组,一个字符串是一个一维字符数组:一个字符串数组就是一个二维字符数组.*/ void main(){ char stuNames[5][100]; char tmp[100]; int i = 0,j = 0; for(i = 0; i < 5; i++) { printf("请输入第%d个学生的名字:"

态度排第一、能力排第二、学历排第三

态度排第一.能力排第二.学历排第三 留个记录.回头补文章

哈林电子会员卡软件,升级会员微信预约排号功能,商家会员无需等待,远程预约排号,微排号系统源码

 哈林电子会员卡软件,升级会员微信预约排号功能,商家会员无需等待,远程预约排号,微排号系统源码 2015年1月4日,哈林科技旗下的电子会员卡管理软件,如期完成会员微信预约排队功能的升级,以下简称[微排队] 本软件的开发旨在给商家提供一个实用,可操作性强的电子会员卡管理平台. 微排队功能的推出主要实现以下功能: 1.商家可以在电子会员卡软件中心实时查看会员近5天内的微信预约,帮助商家合理调配人力 2.电子会员卡软件提供给商家自定义设定每个消费项目每天能服务预约的人数限制 3.商家可以通过软件合

查找字符串中相同连续字符串最多的子串,如果有两串长度相同取asc码 例如1233455 中是33

package test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; // 查找字符串中相同连续字符串最多的子串,如果有两串长度相同取asc码 例如1233455 中是33 /* 思路:新建一个map和字符数组,map中key为字符,value为连续字符个数:当第一次出现字符时,将字符存入m

string字符串转C风格字符串 进而转换为数字

要求如题 头文件stdlib.h中有一个函数atof() 可以将字符串转化为双精度浮点数(double) double atof(const char *nptr); 此字符串为C风格字符串,因此需要将string转化为C风格字符串 此时可用到一个函数c_str() const char *c_str() 参考资料: string中c_str().data().copy(p,n)函数的用法 在使用c_str()时遇到了一个问题–此函数的返回值为const char * 因为是const数据类型,

【C语言】将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)

#include <stdio.h> /* 编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数.负浮点数) 例如:"12.34" 返回12.34 "-123.34" 返回-123.34 函数原型:double my_atof(char *str) {} */ double my_atof(char *str) { double m=0,n=0,x=1; int flag=1; int flag2=0; if(*str=='-') //

【C语言】编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)

/* 编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数.负整数) 例如:"12" 返回12 "-123" 返回-123 函数原型:int my_atof(char *str) */ #include <stdio.h> int my_atof(char *str) { int flag=0; int m=0; if(*str=='-') { flag=1; str++; } while(*str!='\0') { if(*str<

Java实现统计某字符串在另一个字符串中出现的次数

面试时会经常考这样的题目,估计也不让使用正则表达式.还好这个算法还算简单,不过在草稿纸上写难免会出现运行异常,好吧,面试官赢了,乃们屌丝就实实在在的把代码码出来吧. 下面是实现代码: /** * 统计某字符串在另一个字符串中出现的次数 * * */ public class CountHit { public static void main(String[] args) { String a = "123456abcde6ab"; String b = "6abc"

【编程题目】有 n 个长为 m+1 的字符串,如果某个字符串的最后 m 个字符与某个字符串的前 m 个字符匹配...

37.(字符串)有 n 个长为 m+1 的字符串,如果某个字符串的最后 m 个字符与某个字符串的前 m 个字符匹配,则两个字符串可以联接,问这 n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误. 分析:如果出现循环,则返回错误 这句不懂 具体做法是先给每个字符串建一个vector 存入每个字符串后面可以匹配的字符串序号 然后遍历所有的搭配情况,找到最长的. 我的遍历代码很丑... 可谓又臭又长..... 深深的自我鄙视. /* 37.(字符串) 有 n 个长为 m+1 的字符串

输入一个字符串,输出该字符串中对称的子字符串的最大长度。

public class LongestSymmtricalLength2 { /* * Q75题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度. * 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4. */ public static void main(String[] args) { String[] strs = { "a","google", "elgoog", "agol