算法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
作者:justvi
出处:http://www.cnblogs.com/justvi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章正文中给出原文连接,否则保留追究法律责任的权利
出处:http://www.cnblogs.com/justvi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章正文中给出原文连接,否则保留追究法律责任的权利