以下是我实现的一种方式,里面有大量的注释,有不懂之处欢迎提问,望采纳。
#include <iostream>
using namespace std;
#define Ascending true//升序
#define Decending false//降序
/**
* 交换a和b的值
*/
void swap(int &a,int &b)//&表示引用作为参数,也可以使用指针的形式,但不能直接传形参的方式,否则无法交换
{
int temp = a;
a=b;
b=temp;
}
/**
* [sort 排序,根据type决定是升序还是降序]
* @param ary [传进来要排序的数组]
* @param len [排序数目]
* @param type [排序类型,升序或降序]
*/
void sort(int *ary,int len,bool type)
{
//每个数同后面的所有数都比较一次,将最值放到最前面,下次从下一个开始比较
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(type == Ascending)//升序,小的在前面
{
if(ary[i] > ary[j])
swap(ary[i],ary[j]);
}
else//降序,大的在前面
{
if(ary[i] < ary[j])
swap(ary[i],ary[j]);
}
}
cout << ary[i] << " ";//一轮比较下来获得最值,输出,也可以在外面对已经排序好的数组进行打印输出
}
}
int main()
{
int N = 0;
cout << "请输入总数:";
cin >> N;
int *arry_odd = new int[N];//存放奇数
int *arry_even = new int[N];//存放
偶数 int odd_count = 0;//奇数计数
int even_count = 0;//偶数计数
int temp_num = 0; //临时存放从键盘获取的值,判断奇偶之后存到相应数组
if(arry_odd != NULL && arry_even != NULL)
{
for(int i=0;i<N;i++)
{
cout << "请输入第 " << i << " 个数:";
cin >> temp_num;
if(temp_num % 2 == 0)//偶数
{
arry_even[even_count] = temp_num;
even_count++;
}
else //奇数
{
arry_odd[odd_count] = temp_num;
odd_count++;
}
}
cout << "奇数:"<<endl;
sort(arry_odd,odd_count,Ascending);//奇数升序传参Ascending类型
cout << endl;
cout << "偶数:"<<endl;
sort(arry_even,even_count,Decending);//偶数降序传参Decending类型
cout << endl;
delete[] arry_odd;//回收动态分配的内存
delete[] arry_even;//回收动态分配的内存
}
return 0;
}