算法题,算法100题54

/* 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数数组位于数组的后半部分。
* 可以借助快速排序中分成两个部分的思想:取数组中的一个数,移动元素使得数组前半部分的数小于基准数,后半部分大于基准数。
* 用i标示当前元素,j标示最后一个为奇数的下标,若i处数为奇数,则与j+1处的数更换位置,更新i,j即可。*/
1 #include 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
Tags:  笔试算法题 java算法题 经典算法题 算法面试题 算法题

延伸阅读

最新评论

发表评论