要求:使所有奇数排在偶数前面;
第一种方法(使用指针完成)
#include<stdio.h>
int main()
{
int i = 0, x;
int a[10] = { 1,1,2,2,2,1,1,2,1,2 };
int b[10] = {0};
int* p = b;
x = sizeof(a) / sizeof(a[0]);
for (i = 0; i < x; i++)
{
if (a[i] % 2 == 1)
{
*p = a[i];
p++;
}
}
for (i = 0; i < x; i++)
{
if (a[i] % 2 == 0)
{
*p = a[i];
p++;
}
}
for (i = 0; i < x; i++)
{
printf("%d", b[i]);
}
return 0;
}
这种方法需要定义两个数组,a[]用来储存需要更改顺序的数,b[]用来储存和打印更改完顺序的数。使用指针*p来分别使a[]数组中的奇偶数分别储存在b[]数组中,最后打印b[]数组。
第二种方法(类似冒泡)
#include<stdio.h>
int main()
{
int arr[10] = {2,2,2,2,3,3,3,2,3,2};
int n, i = 0, j = 0, x = 0, t = 0;
n = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < n;i++)
{
for (j = 1; j < n; j++)
{
if (arr[j] % 2 == 1)
{
t = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = t;
}
}
}
for (i = 0; i < n; i++)
{
printf("%3d", arr[i]);
}
return 0;
}
这个方法法类似于冒泡排序,把奇数排到偶数的前面。
这种方法的缺点是不能把排在前面奇数按顺序打印。就像这样。
如果有这个要求的话,可以在后面对奇数进行冒泡排序。