函数指针的应用比较排序与冒泡排序指针完成

// 利用函数指针来实现比较排序 冒泡排序
// test.cpp : Defines the entry point for the console application.
//

<pre name="code" class="cpp">// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <IOSTREAM>
using namespace std;
void max_min(int* p, int m, int* max, int* min);

void BubbleSort(int* p, int m);/*冒泡排序*/
void SelectSort(int* p, int m);/*选择排序*/
int main(int argc, char* argv[])
{
	int a[10] = {23,12,-56,48,16,-12,20,0,-9,66};
	int n = 10;
	void (*fp)(int*, int, int*, int*);
	
	int max,min,*pmax = &max, *pmin = &min;

	fp = max_min;
	(*fp)(a,n,pmax,pmin);
	cout<<endl;
	cout<<max<<"  "<<min<<endl;
	int ch = 2;
	void (*fs)(int*, int);/*函数指针*/
	switch(ch)
	{
	case 1:{
		 fs= BubbleSort;
		 fs(a, n);
		   }break;
	case 2:{
		fs = SelectSort;
		fs(a, n);
			}break;
	default:break;
	}
	
	for(int i = 0; i < n; ++i)
	{
		cout<<a[i]<<" ";
	}
	printf("Hello World!\n");
	return 0;
}

void max_min(int* p, int m, int* pmax, int* pmin)
{
	*pmax = *pmin = *p;

	for(int i = 0; i < m; ++i)
	{
		if (*pmax < *(p+i))
		{
			*pmax = *(p+i);
		}
		if (*pmin > *(p+i))
		{
			*pmin = *(p+i);
		}
	}
	

}
/*冒泡排序  最坏情况下O(N*N)*/
void BubbleSort(int* p, int m)
{
	int i,j;
	int flag;
	for (i = 0; i < m; ++i){
		flag = 1;
		for(j = i+1; j < m; ++j){
			if (*(p+i) > *(p+j)){

				flag = 0;
				int temp = *(p+i);
				*(p+i) = *(p+j);
				*(p+j) = temp;
			}
		}
		if (flag){
			break;
		}
	}
}

/*选择排序 O(N*N)*/
void SelectSort(int* p, int m)
{
	int i,j;
	int k;
	for (i = 0; i < m; ++i){
		k = i;
		for(j = i+1; j < m; ++j){
			if (*(p+k) > *(p+j)){
				k = j;
			}
		}
		int temp = *(p+i) ;
		*(p+i) = *(p+k);
		*(p+k) = temp;
	}
	
}

 
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值