zoukankan      html  css  js  c++  java
  • 函数指针作为函数參数,实现冒泡排序的升序排序和降序排序

    #include<stdio.h>
    
    #define N 10//定义数组元素个数
    int Ascending(int a,int b);//升序排列的函数声明
    int Descending(int a,int b);//降序排列的函数声明
    void swap(int*,int*);//交换数据的函数声明
    void BubbleSort(int a[],int n,int (*compare)(int,int));//声明排序函数,通过函数指针作为函数调用
    void Display(int a[],int n);//输出数组元素的函数声明
    void main()
    {
    	int a[N]={12,34,21,46,89,54,26,8,6,17};
    	int flag;
    	while(1)
    	{
    		printf("输入1:从小到大排序。
    输入2:从大到小排序
    输入3:退出!

    "); scanf("%d",&flag); switch(flag) { case 1: printf("排序前的数据为:"); Display(a,N); BubbleSort(a,N,Ascending);//从小到大排序。将函数作为參数传递 printf("从小到大排列后的数据为:"); Display(a,N); break; case 2: printf("排序前的数据为:"); Display(a,N); BubbleSort(a,N,Descending);//从大到小排序。将函数作为參数传递 printf("从大到小排列后的数据为:"); Display(a,N); break; case 3: return; break; default: printf("输入数据不合法,请又一次输入。 "); break; } } } //冒泡排序,将函数作为參数传递,推断是从小到大还是从大到小排序 void BubbleSort(int a[],int n,int(*compare)(int,int)) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n-1;j++) if((*compare)(a[j],a[j+1])) swap(&a[j],&a[j+1]); } } //交换数组的元素 void swap(int *a,int *b) { int t; t=*a; *a=*b; *b=t; } //推断相邻数据的大小,假设前者大,升序排列须要交换 int Ascending(int a,int b) { if(a>b) return 1; else return 0; } //推断相邻数据的大小,假设前者大,降序排列须要交换 int Descending(int a,int b) { if(a<b) return 1; else return 0; } void Display(int a[],int n)//输出数据元素 { int i; for(i=0;i<n;i++) printf("%5d",a[i]); printf(" "); }

    程序执行结果



  • 相关阅读:
    内存分配略谈
    变量声明顺序和指针偏移问题示例
    解决You have to be inside an Angular CLI project in order to use the serve command
    Linux中将命令放到全局
    Linux设置vim显示行号
    根据指定的excel模板导出数据
    解决 Maven工程运行报错Failed to clean project: Failed to delete
    springcloud工作用常用到的一些注解
    cmd窗口备份mysql数据库
    调用存储过程msql
  • 原文地址:https://www.cnblogs.com/llguanli/p/7147277.html
Copyright © 2011-2022 走看看