利用函数指针对数组进行排序

#include<stdio.h>
int compare(int a,int b)
{
	return a - b;
}
void sort(int *a,int n,int(*p)(int,int))
{
	int i,j;
	/*
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-i-1;j++)
		{
			if(p(a[j],a[j+1])>0)
			{
				int temp;
				temp = a[j+1];
				a[j+1] = a[j];
				a[j] = temp;
			}
		}

	}
	*/
	//冒泡排序的两种形式
	for(i=0;i<n;i++)
	{
		for(j=i;j<n;j++)
		{
			if(p(a[i],a[j])>0)
			{
				int temp;
				temp = a[j];
				a[j] = a[i];
				a[i]=temp;
			}
		}

	}

}
void print(int *a,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("%d\t",*(a+i));
	}
	printf("\n");
}
int main()
{
	int a[5]={5,4,3,2,1};
	sort(a,5,compare);
	print(a,5);
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 11:45:24

利用函数指针对数组进行排序的相关文章

利用函数指针对数组进行排序(选择排序实现)

#include<stdio.h> int compare(int a,int b) { return a - b; } void select_sort(int *a,int n,int(*p)(int,int)) { int i,j; for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(p(a[i],a[j])>0) { int temp; temp = a[j]; a[j] = a[i]; a[i]=temp; } } } } vo

关于复杂指针数组,函数以及函数指针,数组思考

指针数组其实是数组,只不过是数组里面放着指针如int *p[],由于中括号的优先级高于星号,所以p先与中括号结合形成数组,然后再与星号结合形成指针数组,即每一个数组元素是一个指向整形数据的指针.而数组指针实际上是指向数组的指针如int(*p)[]. 同理函数指针是指向一个函数的指针,指针函数是说这个指针指向了一个函数如int(*fun)(int) ,而函数指针则意味着它是一个函数,这个函数的返回值是一个指针,如int * fun(intx).因此通过这个规律我们可以理解更深层次的更复杂的指针,

函数指针与数组指针与指针

1.接收return返回的数组元素 一般来说,是返回一个函数值,像一个int, double,char等类型的数据,当然也可以是他们的指针.但是当我们遇到要返回很多数怎么办呢?通常想到的是以数组的形式返回,下面就让我们来看看: 1.通过返回传入数组指针的方式:2.以指针变量作为函数参数,来实现数组的返回. 1. 首先我们来看看这种方法所涉及的知识:(1)指针函数.C语言中允许一个函数返回值是一个指针(地址)基本格式是: 基类型 * 函数名(参数列表)(2)静态变量与局部变量.我们知道C语言程序在

c语言实现字符指针(字符串)数组的排序

需求: "ff555d", "114ddd", "114dd","aaa", "aaab", "aaa" d对它们进行排序 头文件: #include<stdlib.h> #include<stdio.h> #include<string.h> 函数原型: void printArray(char **buff,int len); void sortB

9.02 函数指针的数组简明用法

#include <stdio.h> int sum(int,int); int product(int,int); int different(int,int); int main(void) { int a = 10; int b = 5 ; int result = 0; int (*pfun[3])(int,int); //其实也可以这样用,int (*pfun[3])(int,int) = {sum,product,different}; pfun[0] = sum; pfun[1]

C/C++函数指针(typedef简化定义)

学习要点:        1,函数地址的一般定义和typedef简化定义;        2,函数地址的获取;        3,A函数地址作为B函数参数的传递;    函数存放在内存的代码区域内,它们同样有地址.如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址.    定义一个指向函数的指针用如下的形式,以上面的test()为例:    int (*fp)(int a);//这里就定义了一个指向函数(这个函数的参

C++——指针---指向数组的指针---指向字符串的指针--指向函数的指针--指针的指针--指针的引用

一.指向数组的指针 代码示例1: 1 int main() 2 { 3 int a[10]={0,2,4,6,8,10,12,14,16,18}; 4 int *p; 5 for(p=&a[0];p<&a[0]+10;p++) 6 printf("%d ",*p); 7 } 代码示例2: int a[10]={0,2,4,6,8,10,12,14,16,18}; int *p; p=a; printf("%d\n",*(a+5));//注意加括

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针 指针与数组 指针与字符串 指针与函数?? 指针与数组 1.数组名:数组元素首地址 eg: int array[3]={1,3,6}; 这里array 恒等于&array[0] 2.int *p = a; int *p = 0; int a[]={0}; 3.int *p = a; 均指向数组的首地址 *p是? *(p+1)是?(*p)+1是? *(p+1)决定向下移动几个字节是类型 4.指针可以当数组名使用 p[1] = 3; 恒等于a[1] ;恒等于*(p+1);恒等于*(a+1) 5.

解析 指针数组,数组指针,函数指针

一 :关于指针和堆的内存分配 指针数组 : 一个数组里放的都是指针,我们把他叫做指针数组 int * a[10]; 由于它是一个数组,他是不能从堆空间里申请空间的. 只能做个循环,每个元素去申请空间,或者每个元素去指向另外的地址空间. 数组指针 : 一个指向一唯或者多唯数组的指针: int * b=new int[10]; 指向一唯数组的指针b ; 一些例子: int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二唯int型数组的首地址. 注意,这里的b2的类