`

奇偶排序

阅读更多
题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分, 
所有偶数位于数组的后半部分。要求时间复杂度为O(n)。 
针对这个题目,我们可以维护两个指针,一个指针指向数组的第一个数字,向后移动;一个指针指向最后一个数字,向前移动。分四种情况: 
1.如果后一个指针指向奇数而前一个指针指向偶数,则交换两个数;之后,前一个指针继续向后移动,后一个指针继续向前移动; 
2.如果后一个指针指向奇数而前一个也指针指向奇数,则前一个指针继续向后移动,后一个指针位置不变; 
3.如果后一个指针指向偶数而前一个指针也指向偶数,则前一个指针位置不变,后一个指针继续向前移动; 
4.如果后一个指针指向偶数而前一个指针指向奇数,则前一个指针继续向后移动,后一个指针继续向前移动;
public class Test {
    
    public static void main(String[] args) 
    {
        oddEvenSort(new int[]{1,2,3,4,5,6,6,6,66,7,8,9,10,11,1,1,1,1,1,14,15});
    }
    
    public static void oddEvenSort(int[] arr)
    {
        int temp;
        
        for(int i = 0, j = arr.length-1; i < j;)
        {
            if(arr[j]%2 == 1)
            {
                if(arr[i]%2 == 0)
                {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                    
                    i++;
                    j--;
                }
                else
                {
                    i++;
                }
            }
            else
            {
                if(arr[i]%2 == 0)
                {
                    j--;
                }
                else
                {
                    i++;
                    j--;
                }
            }
        }
        
        for(int i : arr)
        {
            System.out.print(i + ","); 
        }
    }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics