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(" "); }

    程序执行结果



  • 相关阅读:
    干将莫邪
    Rancher
    Rancher 1.6 版本 只能在 linux 下用
    野蛮人大作战
    Oracle
    Gradle
    正则表达式 我遇到的
    Redis
    NestJS 用TypeScript开发 nodeJS后端
    Koa2
  • 原文地址:https://www.cnblogs.com/llguanli/p/7147277.html
Copyright © 2011-2022 走看看