函数的指针写一个能对任意数组排序的冒泡排序

Posted 爱白菜的小昆虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数的指针写一个能对任意数组排序的冒泡排序相关的知识,希望对你有一定的参考价值。

MyFunc.cpp文件内容

 1 void swap (char *a, char *b, size_t width){
 2     char tmp;
 3     while(width--){
 4         tmp = *a;
 5         *a++ = *b;
 6         *b++ = tmp;
 7     }
 8 }
 9 //冒泡排序 base:数组首地址 num:数组元素个数 width:数组元素的字节 comp:为函数指针
10 void BubbleSort(void *base, size_t num, size_t width, int (*comp)(const void *, const void *)){
11     char *end = (char *)base + num * width;
12     for(char *i = (char *)base; i < end; i += width){
13         for(char *j = i + width; j < end; j += width){
14             if((*comp)(i, j) > 0){
15                 swap(i, j, width);
16             }
17         }
18     }
19 }

MyFunc.h文件内容

1 void BubbleSort(void *, size_t , size_t , int (*)(const void *, const void *));

Main.cpp文件内容

 1 //
 2 //2016年6月1日 18:00
 3 //
 4 //爱白菜的小昆虫
 5 //
 6 //写一个对任意数组冒泡排序函数……
 7 //通过这个例子对空指针的运用
 8 //通过这个例子对函数指针的使用
 9 //
10 
11 
12 #include <stdio.h>
13 
14 #include "MyFunc.h"
15 
16 #define N 10
17 
18 struct Point{
19     int x;
20     char *str;
21 } p[] = {
22     {9, "nine"}, {8, "eight"}, {7, "seven"}, {6, "six"}, {5, "five"},
23     {4, "four"}, {3, "three"}, {2, "two"}, {1, "one"}, {0, "zero"}
24 };
25 
26 int cmp1(const void *x, const void *y){
27     Point *a = (Point *)x,
28         *b = (Point *)y;
29     return a->x - b->x;
30 }
31 //自己写比较函数
32 int cmp(const void *x, const void *y){
33     int *a = (int *)x, 
34         *b = (int *)y;
35     return *a - *b;
36 }
37 
38 //自己写一个对任意数组都能排序的冒泡排序
39 int main(){
40     int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
41 
42     puts(""); for(int i = 0; i < N; ++i) printf("%d ", arr[i]);
43     BubbleSort(arr, N, sizeof(int), cmp);
44     puts(""); for(int i = 0; i < N; ++i) printf("%d ", arr[i]);
45     puts("");
46     
47     puts("按照x升序");
48     puts("排序前:"); for(int i = 0; i < N; ++i) printf("%d %s\\n", p[i].x, p[i].str);
49     BubbleSort(p, N, sizeof(Point), cmp1);
50     puts("排序后:"); for(int i = 0; i < N; ++i) printf("%d %s\\n", p[i].x, p[i].str);
51 
52     return 0;
53 }

运行效果:

以上是关于函数的指针写一个能对任意数组排序的冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

模拟qsort实现冒泡排序

c++中参考C语言的qsort函数实现一个一个能对任意数据类型(包括结构体)的数组进行排序的函数

0137 函数案例:数组翻转冒泡排序判断闰年

实验十一:指针

C++如何封装一个数组冒泡排序的方法

C++ 小白入门实操自学笔记——(5.指针传递的冒泡排序)