代码改变世界

算法100题54

2011-09-18 23:01  justvi  阅读(932)  评论(2编辑  收藏  举报

/* 题目来自:http://blog.csdn.net/v_JULY_v 

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

 * 可以借助快速排序中分成两个部分的思想:取数组中的一个数,移动元素使得数组前半部分的数小于基准数,后半部分大于基准数。

 * 用i标示当前元素,j标示最后一个为奇数的下标,若i处数为奇数,则与j+1处的数更换位置,更新i,j即可。*/

 1 #include <stdio.h>
2
3 void swap(int *a, int i, int j)
4 {
5 int temp;
6 temp = a[i];
7 a[i] = a[j];
8 a[j] = temp;
9 }
10
11 void func(int *a, int n)
12 {
13 int i, j;
14 j = -1;
15 for (i = 0; i < n; i++)
16 {
17 if (a[i] % 2 != 0)
18 swap(a, ++j, i);
19 }
20 }
21
22 void print(int *a, int len)
23 {
24 int i;
25 for (i = 0; i < len; i++)
26 printf("%d ", a[i]);
27 printf("\n");
28 }
29
30 int main()
31 {
32 int arr[] = {3, 4, 98, 4, 3, 2, 77, 2, 25};
33 int len = sizeof(arr) / sizeof(arr[0]);
34 func(arr, len);
35 print(arr, len);
36
37 return 0;
38 }

  则输出为:3,3,77,25,4,2,98,2,4