定义一个一维整形数组num[20],输入正整数N(N≤20)代表num的实际元素个数,输入N个任意整数到num中,编写函数sort()实现排序处理,完成前面奇数,后面偶数,分别从小到大排序。使用指针完成地址传递,主函数完成N、数组元素的输入和处理后的数组元素输出。
#include <vector>
int main()
{
int num[20];
int n = 0;
cout << "请输入数量";
cin >> n;
cout << "请输入" << n << "个数字";
for (int i = 0; i < n; ++i)
{
cin >> num[i];
}
vector<int> res;
vector<int> res2;
//添加奇数
for (int i = 0; i < n; ++i)
{
if (num[i] % 2 != 0)
{
res.push_back(num[i]);
}
}
//添加偶数
for (int i = 0; i < n; ++i)
{
if (num[i] % 2 == 0)
{
res2.push_back(num[i]);
}
}
//排序
for (int i = 0; i < res.size(); ++i)
{
for (int j = i + 1; j < res.size(); ++j)
{
if (res[i] > res[j])
{
swap(res[i], res[j]);
}
}
}
for (int i = 0; i < res2.size(); ++i)
{
for (int j = i + 1; j < res2.size(); ++j)
{
if (res2[i] > res2[j])
{
swap(res2[i], res2[j]);
}
}
}
cout << "排序后结果" << endl;
for (int i = 0; i < res.size(); ++i)
{
cout << res[i] << endl;
}
for (int i = 0; i < res2.size(); ++i)
{
cout << res2[i] << endl;
}
return 0;
}
#include <stdio.h>
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
int needs_swap(int a, int b)
{
if (a % 2 == 0 && b % 2 != 0)
return 1;
if (a % 2 != 0 && b % 2 == 0)
return 0;
return a > b;
}
void sort(int a[], int N)
{
for (int i = 0; i < N - 1; i++)
for (int j = i + 1; j < N; j++)
if (needs_swap(a[i], a[j]))
swap(&a[i], &a[j]);
}
int main()
{
int a[20], N;
scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d", &a[i]);
sort(a, N);
for (int i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
$ gcc -Wall main.c
$ ./a.out
5
5 4 3 2 1
1 3 5 2 4