第一种思路是先将所有的奇数找出来,再将偶数找出来然后存到另一个数组里
void sort(int arr1[], int arr2[], int sz)
{
int i = 0;
int j = 0;
int k = 0;
if (sz % 2 == 0)
{
k = sz / 2;
}
else
{
k = sz / 2 + 1;
}//k是数组下标的中间值
for (i = 0; i < sz; i++)
{
if (arr1[i] % 2 != 0)//奇数
{
arr2[j] = arr1[i];
j++;
}
else//偶数
{
arr2[k] = arr1[i];
k++;
}
}
}
int main()
{
int arr1[10] = { 0 };
int arr2[10] = { 0 };
int i = 0;
int sz = sizeof(arr1) / sizeof(arr1[0]);
for (i = 0; i < sz; i++)
{
scanf("%d", arr1 + i);
}
sort(arr1,arr2,sz);
for (i = 0; i < sz; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
第二种是从左边找到一个奇数,同时从右边找到一个偶数,然后交换它们,
void sort(int arr[],int sz)
{
int left = 0;
int right = sz - 1;
//左边找奇数
while (left < right)
{
while (left<right &&(arr[left] % 2 == 0))
{
left++;
}
//右边找偶数
while ((left<right)&&(arr[right] % 2 != 0))
{
right--;
}
//交换
if (left < right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
}
int main()
{
int arr[10] = { 0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
scanf("%d", arr + i);
}//输入
//调整
sort(arr, sz);
//打印
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
第二种虽然有俩个while嵌套,但是只对数组进行了一次编订,效率是最高的。