问题分析:可以借用快速排序的实现方法,将判断条件修改即可,之所以调用函数指针,是为了适应多种要求,例如“将负数都放在正数前面”,“将能被3整除的放在前面”
#include "stdafx.h"
#include <iostream>
using namespace std;
void Sort(int arr[],int la, bool (*func)(int))
{
int temp;
int i=-1;//i指向最后一个奇数
for (int j=0;j<la;++j)
{
if (func(arr[j]))
{//是奇数,需要转移到前边去
++i;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
bool IsOdd(int n)
{
if (n%2!=0)
{
return true;
}
return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
int arr[]={2,4,3,6,5};
int la=sizeof(arr)/sizeof(int);
bool IsOdd(int n);
bool (*isOdd)(int)=&IsOdd;
Sort(arr,la,isOdd);
for (int i=0;i<la;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
return 0;
}

本文介绍了一种基于快速排序思想的变形应用,通过调整排序条件,实现了特定的数据组织方式。示例代码展示了如何将数组中的奇数全部移至偶数之前的过程,并通过函数指针增强了程序的灵活性。
467

被折叠的 条评论
为什么被折叠?



