题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
考虑直接插入排序的思想,将后面的奇数依次插入到偶数前
Java
package nowcoder;
public class S13_reOrderArray {
//利用直接插入排序的思想
public void reOrderArray(int[] array){
int n = array.length;
int i=0;
while (i<n){
if (array[i]%2 ==1)
i++; //i记录前面第一个偶数的下标
else {
int j=i+1;
while (j<n && array[j]%2==0)
j++;
if (j >= n)
break;
int temp = array[j]; //找到又一个奇数
while (j > i) {
array[j] = array[j-1];
j--;
}
array[i] = temp;
i ++;
}
}
}
public static void main(String[] args){
S13_reOrderArray s13 = new S13_reOrderArray();
int[] arr = {1,2,4,6,8,5,7,9};
s13.reOrderArray(arr);
for (int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
}
}
Python
class ReOrderArray:
def reOrderArray(self, array):
i = 0
while i < len(array):
if array[i] % 2 == 1:
i += 1
else:
j = i + 1
while j< len(array) and array[j] % 2 == 0:
j += 1
if j >= len(array):
break
temp = array[j]
while j > i:
array[j] = array[j-1]
j -= 1
array[i] = temp
i += 1
if __name__ == '__main__':
test = ReOrderArray()
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
test.reOrderArray(array)
for i in range(len(array)):
print(array[i], end=" ")
或者:
def reOrderArray(self, array):
lo = []
le = []
for i in range(len(array)):
if array[i] % 2 == 1:
le.append(array[i])
else:
lo.append(array[i])
return le + lo
结果:
1 3 5 7 9 2 4 6 8
Process finished with exit code 0