编写冒泡排序,可以排序整形数组,也可以排序字符串

程序代码:

void swap(const void * p1 , const void * p2 ,int size)

{

int i = 0;

for (i = 0; i < size ; i++)

{

char temp = *((char *)p1 + i);

*(( char *)p1 + i) = *((char*) p2 + i);

*(( char *)p2 + i) = temp;

}

}

void buble(void *base, int count , int size, int (*compare )(const void *, const void *))

{

int i = 0;

int j = 0;

for (i = 0; i < count ; i++)

{

for (j = 0; j < count - i - 1; j++)

{

if (compare (((char*) base + size *j), ((char*) base + size *(j + 1)))>0)

{

swap((( char *)base + size*j), (( char *)base + size *(j + 1)), size );

}

}

}

}

你可以重新建立一个头文件,把它放在你建立的头文件中,然后在排序字符串或者排序整型时,把你建立的头文件加上就能使用他了,当然你也可以把它放在你的程序中运用。

假如我在VS2013中建立一个“sort.h“的头文件,然后我在我的”.c“文件中写一个排整型的程序:

#include<stdio.h>

#include<sort.h>

#include<stdlib.h>

int int_cmp(const void * p1 , const void * p2 )

{

if (*(int *)p1 > *( int *)p2 )

{

return 1;

}

if (*(int *)p1 == *( int *)p2 )

{

return 0;

}

else

{

return -1;

}

}

int main()

{

int arr[] = { 5, 7, 8, 3, 2, 6, 9, 1, 4, 0 };

buble(arr, sizeof (arr) / sizeof (arr[0]), sizeof( int ), int_cmp);

for (int i = 0; i < 10; i++)

{

printf( "%d " , arr[i]);

}

printf( "\n" );

system( "pause" );

return 0;

}

如果排序字符串,程序如下:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include <sort.h>

int str_cmp(const void * str1 , const void * str2 )

{

return strcmp((char *)(*(int*) str1 ), (char *)(*(int*) str2 ));

}

int main()

{

char *arr[] = { "cccc" , "ffff", "bbbb" , "aaaa" };

buble(arr, sizeof (arr) / sizeof (arr[0]), sizeof( char *), int_cmp);

for (int i = 0; i < 4; i++)

{

printf( "%s " , arr[i]);

}

printf( "\n" );

system( "pause" );

return 0;

}

你也可以把他们放在一起运用,假如我放在一起运用排序整型字符串:

#include<stdio.h>

#include<stdlib.h>

int int_cmp(const void * p1 , const void * p2 )

{

if (*(int *)p1 > *( int *)p2 )

{

return 1;

}

if (*(int *)p1 == *( int *)p2 )

{

return 0;

}

else

{

return -1;

}

}

void swap(const void * p1 , const void * p2 ,int size)

{

int i = 0;

for (i = 0; i < size ; i++)

{

char temp = *((char *)p1 + i);

*(( char *)p1 + i) = *((char*) p2 + i);

*(( char *)p2 + i) = temp;

}

}

void buble(void *base, int count , int size, int (*compare )(const void *, const void *))

{

int i = 0;

int j = 0;

for (i = 0; i < count ; i++)

{

for (j = 0; j < count - i - 1; j++)

{

if (compare (((char*) base + size *j), ((char*) base + size *(j + 1)))>0)

{

swap((( char *)base + size*j), (( char *)base + size *(j + 1)), size );

}

}

}

}

int main()

{

int arr[] = { 5, 7, 8, 3, 2, 6, 9, 1, 4, 0 };

buble(arr, sizeof (arr) / sizeof (arr[0]), sizeof( int ), int_cmp);

for (int i = 0; i < 10; i++)

{

printf( "%d " , arr[i]);

}

printf( "\n" );

system( "pause" );

return 0;

}

如果排序字符串,代码如下:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int str_cmp(const void * str1 , const void * str2 )

{

return strcmp((char *)(*(int*) str1 ), (char *)(*(int*) str2 ));

}

void swap(const void * p1 , const void * p2 ,int size)

{

int i = 0;

for (i = 0; i < size ; i++)

{

char temp = *((char *)p1 + i);

*(( char *)p1 + i) = *((char*) p2 + i);

*(( char *)p2 + i) = temp;

}

}

void buble(void *base, int count , int size, int (*compare )(const void *, const void *))

{

int i = 0;

int j = 0;

for (i = 0; i < count ; i++)

{

for (j = 0; j < count - i - 1; j++)

{

if (compare (((char*) base + size *j), ((char*) base + size *(j + 1)))>0)

{

swap((( char *)base + size*j), (( char *)base + size *(j + 1)), size );

}

}

}

}

int main()

{

char *arr[] = { "cccc" , "ffff", "bbbb" , "aaaa" };

buble(arr, sizeof (arr) / sizeof (arr[0]), sizeof( char *), int_cmp);

for (int i = 0; i < 4; i++)

{

printf( "%s " , arr[i]);

}

printf( "\n" );

system( "pause" );

return 0;

}

当然我还是建议大家把代码分开写,这样看起来简洁明了,逻辑性强,让别人能很快看明白,希望你们能养成这样的好习惯。

时间: 2024-08-04 12:41:08

编写冒泡排序,可以排序整形数组,也可以排序字符串的相关文章

&lt;笔试&gt;&lt;面试&gt;编写一个排序函数,实现,既可以排序整形数组,又可以排序字符串。

思路:仿照qsort函数运用函数指针实现排序整形数组.排序字符串的功能. 首先,编写整形数组比较函数和字符串比较函数:其次,仿照qsort函数将首元素地址.元素个数.元素大小.比较函数 传参编写熟悉的冒泡排序函数:最后,举例验证函数正确性. /******************************/ //1.编写冒泡排序,可以排序整形数组,也可以排序字符串. #include<stdio.h> #include<stdlib.h> #include<assert.h&g

随机数,字符数组与整形数组的捆绑排序

13.(***)模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A.B.C.D表示,当选某候选人时,直接输入其编号(编号由计算机随机产生), 若输入的不是A.B.C.D则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数. 要求:取随机数,通过随机数结果判断选票结果并存储到数组中,然后通过下表同时将整形数组与对应的字符数组排序,输出结果. int main() { int people_num; printf("输入群众人数:"); scanf("

实现冒泡排序。(排序整形数组)。使用数组和指针两种方法。

法一:指针 #include<stdio.h> #include<stdlib.h> void bubble_sort(int arr[], int sz) { int i = 0; int j = 0; for (j = 0; j < sz - 1; j++) { for (i = 0; i < sz - 1 - j; i++) { if (*(arr + i) < *(arr + i + 1)) { int tmp = *(arr + i); *(arr + 

回调函数实现对整形数组和字符串的排序

(一)冒泡排序实现对整形数组的排序 在以前,我们只会使用冒泡排序的方法对整行数组进行排序,简单的两个for循环,外层循环控制循环次数,内层循环控制比较次数,就像下面代码,便可实现: #include<stdio.h> int main() { int arr[10]={11,9,8,7,6,5,4,3,2,1}; int i=0; int j=0; int tmp=0; for(j=0;j<10;j++) { for(i=0;i<10-j;i++) if(arr[i]>arr

输入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个学生的名字:"

关于数组的几个小题目-冒泡排序、二分查找、直接选择排序、反转数组

1. 实现冒泡排序算法,对比相邻元素,如果满足条件就叫唤元素值,把较小的元素移动到数组前面,把较大的元素移动到数组的后面,这样较小的元素就逐渐从底部上升到顶部,排到前面了. public class zuoye14_maopaopaixu { public static void main(String[] args){ int[] array = new int[]{12,45,21,35,65,24,43}; for(int i=0;i<array.length;i++){ for(int

java数组降序排序之冒泡排序

1 import java.util.Arrays;//必须加载 2 class Demo{ 3 public static void main(String []args){ 4 int[] arr={3,54,456,342,2798,15,78,56,95,5678,9,5}; 5 System.out.println(Arrays.toString(arr));//java打印数组,排序前[3, 54, 456, 342, 2798, 15, 78, 56, 95, 5678, 9, 5

已知s.txt文件中有一个这样的字符串 请编写程序读取数据内容,把数据排序后写入 ss.txt文件

package cn.idcast5; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Arrays; /* * 需求:已知s.txt文件中有一个这样

Java数据结构和算法之数组与简单排序

一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 一维数组 一维数组(one‐dimensional array )实质上是相同类型变量列表.要创建一个数组,你必须首先定义数组变量所需的类型.通用的一维数组的声明格式是: type var‐name[ ]; 获得一个数组需要2步: 第一步,你必须定义变量所需的类型. 第二步,你必