您的位置:首页 > 其它

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

2016-04-29 19:48 519 查看
// 利用函数指针来实现比较排序 冒泡排序
// 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;
}

}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: