zoukankan      html  css  js  c++  java
  • 函数的指针(一)写一个能对任意数组排序的冒泡排序

    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
    ", 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
    ", p[i].x, p[i].str);
    51 
    52     return 0;
    53 }

    运行效果:

  • 相关阅读:
    bzoj1625 / P2871 [USACO07DEC]手链Charm Bracelet
    bzoj1623 / P2909 [USACO08OPEN]牛的车Cow Cars
    bzoj1622 / P2908 [USACO08OPEN]文字的力量Word Power
    bzoj1621 / P2907 [USACO08OPEN]农场周围的道路Roads Around The Farm
    bzoj1620 / P2920 [USACO08NOV]时间管理Time Management
    [3.10校内训练赛]
    [bzoj1084][SCOI2005]最大子矩阵
    [bzoj1500][NOI2005]维修数列
    bzoj省选十连测推广赛
    多项式插值学习记录
  • 原文地址:https://www.cnblogs.com/xuqiulin/p/5550922.html
Copyright © 2011-2022 走看看