奇数位于偶数前面O(n)

来源:互联网 发布:centos 7 yum iso 编辑:程序博客网 时间:2024/06/08 06:10

题目:输入一个整数数组,实现一个函数来调整该数组中的数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。

思路一:直接从头开始遍历,遇到偶数然后将后面的数全部向前移动,把这个偶数放到数组的最后。该方法使用的思想类似于冒泡算法:将偶数下沉。其时间复杂度相对较高O(n^2)

思路二:从排序的思路上学来的,一个标记数组头部,一个标记数组尾部。头部向后移动遇到偶数停止移动,尾部向前移动遇到奇数停止,然后交换两个数,依次下去,直到头部的标记大于或者等于尾部的标记便停止。相当于只将数组遍历了一遍便完成了任务。时间复杂度比思路一要低。

思路二的代码:

public static void SortNums(int[] nums,int low,int high) {while(low<high) {while(low<high && nums[low]%2 == 1 ) {low += 1;}while(low<high && nums[high]%2 == 0) {high -= 1;}int temp = nums[low];nums[low] = nums[high];nums[high] = temp;}}public static void main(String[] args) {// TODO Auto-generated method stubint[] nums = {1,2,3,4,5,6,7,8,9,0};SortNums(nums,0,9);for (int i = 0; i < nums.length; i++) {System.out.print(nums[i]+"  ");}System.out.println();}}