标签:
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n),不要求保留数组元素的相对位置。
解析:可以维护两个指针:第一个指针初始化为数组的第一个数字,它只向后移动;第二个指针初始化为数组的最后一个数字,它只向前移动。在两个指针相遇之前,第一个指针总是位于第二个指针的前面。如果第一个指针指向的数字是偶数而第二个指针指向的数字是奇数,就交换这两个数字。
方法一:
void patition(ref int[] arr, int n)
7 {
8 if (n == 0 || n == 1) return;
9 int i = 0, j = n - 1;
10
11 int temp;
12
13 while (i < j)
14 {
15
16 if ((arr[i] & 1) == 1) //是奇数
17 {
18
19 i++;
20
21 continue;
22
23 }
24
25 if ((arr[j] & 1) == 0)
26 {
27
28 j--;
29
30 continue;
31
32 }
33
34 temp = arr[i];
35
36 arr[i] = arr[j];
37
38 arr[j] = temp;
39
40 i++;
41
42 j--;
43
44 }
45
46 }
标签:
原文地址:http://blog.csdn.net/u014082714/article/details/43538321