设计一个算法,将整数数组S[1…n]中所有偶数都放到奇数之前,要求算法时间复杂性为O(n)。
算法思想:利用快排交换
C语言代码
#include<stdio.h>
/*算法思想:1.从表头开始从前向后遍历,寻找奇数元素S[i]
2.从表尾开始从后向前遍历,寻找偶数元素S[j]
3.交换二者
4.重复上述过程,直至i>j
*/
int* Sort_1(int *S, int n) {
int i = 0;//i表示左端元素的下标
int j = n - 1;//j表示右端元素的下标
while (i != j) {//当i和j没相遇时
while (i < j && S[i] % 2 == 0) {
i++;//从前向后遍历,寻找第一个奇数元素
}
while (i < j && S[j] % 2 == 1) {
j--;//从后往前遍历,寻找第一个偶数元素
}
if (i < j) {//交换元素
int temp = S[j];
S[j] = S[i];
S[i] = temp;
}
}
return S;
}
java代码指路
将数组中奇数放到偶数前面java实现