调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
#include<stdio.h>
/*> 1. 调整数组使奇数全部都位于偶数前面。
>
> 题目:
>
> 输入一个整数数组,实现一个函数,
> 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
> 所有偶数位于数组的后半部分。*/
void array(int arr[],int num)
{
int left = 0, right = num - 1;
while (left < right)
{
if (arr[left] % 2 == 0)
{
if (arr[right] % 2 != 0) //arr[i] && 1
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
}
else //!(arr[i] && 1)
{
right--;
}
}
else
{
left++;
}
}
for (int i = 0; i < num; i++)
{
printf("%3d", arr[i]);
}
}
int main()
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int num = sizeof(arr) / sizeof(arr[0]);
array(arr, num);
return 0;
}
Java代码
public void reOrderArray(int[] array) {
int k = 0;
for (int i = 0; i < array.length; i++) {
if ((array[i] & 1) == 1) {//从左向右,每次遇到的,都是最前面的奇数,一定将来要被放在k下标处
int temp = array[i];//现将当前奇数保存起来
int j = i;
while (j > k) {//将该奇数之前的内容(偶数序列),整体后移一个位置
array[j] = array[j - 1];
j--;
}
array[k++] = temp;//将奇数保存在它将来改在的位置,因为我们是从左往右放的,没有跨越奇数, 所以一定是相对位置不变的
}
}
}