public static void quickSort(Integer[] arr){
int left = 0;
int right = arr.length - 1;
while (left < right){
while (arr[left] % 2 != 0) left++;
while (arr[right] % 2 == 0) right--;
if(left < right) {
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
}
}
Arrays.sort(arr, 0, left); //升序奇数区
Arrays.sort(arr, left , arr.length, new Comparator<Integer>() {
public int compare(Integer integer, Integer t1) { //降序偶数区
return t1 - integer;
}
});
} public static void main(String[] args) {
int[] arr = {1,52,9,6,23,4,3,7};
int m = 0;
int n = arr.length-1;
for(int i = 0; i < arr.length; i++){
if(arr[m] % 2 == 1){
m++;
}
if (arr[n] % 2 == 0) {
n--;
}
if ( m < n) {
int x = arr[m];
arr[m] = arr[n];
arr[n] = x;
}
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 1) {
for (int j = i; j < arr.length; j++) {
if (arr[i] > arr[j] && arr[j] % 2 == 1) {
int p = arr[i];
arr[i] = arr[j];
arr[j] = p;
}
}
}
if (arr[i] % 2 == 0) {
for (int j = i; j < arr.length; j++) {
if (arr[i] < arr[j] && arr[j] % 2 == 0) {
int p = arr[i];
arr[i] = arr[j];
arr[j] = p;
}
}
}
}
} int cmp(const void* a,const void* b);
void SORT()
{
int i,flag=0;
int b[MAXN];
for(i=0;i<n;i++) //先用数组b[n]临时存放a[n]
b[i] = a[i];
qsort(b,n,sizeof(a[0]),cmp);//#include <stdlib.h> 从小到大快排
//先处理所有奇数
for(i=0;i<n;i++)
if(b[i]&1)
a[flag++] = b[i];
//再处理所有偶数
for(i--;i^(-1);i--)
if(!(b[i]&1))
a[flag++] = b[i];
}
int cmp(const void* a,const void* b)
{
return *(int *)a - *(int *)b;
} public static void sort(int[] a) {
int temp;
int oddEnd = 0; //最后一个奇数所在下标
for (int i = 0; i < a.length; i++) {//奇偶分离
if(a[i]%2==1) {//如果当前是奇数
for (int j = 0; j < i; j++) {//找到第一个不是奇数的位置替换,最过分情况在原地不动
if (a[j]%2==0) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
oddEnd = j;
break; //找到第一个不是奇数的位置替换后 要 退出,确定奇数结束下标
}
}
}
}
for (int i = 0; i <= oddEnd; i++) {//奇排
for (int j = 0; j < oddEnd-i; j++) {
if (a[j]>a[j+1]) {
temp = a[j+1] ;
a[j+1] = a[j];
a[j] = temp;
}
}
}
for (int i = oddEnd+1; i < a.length; i++) {//偶排
for (int j = oddEnd+1; j < a.length -1; j++) {
if (a[j]<a[j+1]) {
temp = a[j+1] ;
a[j+1] = a[j];
a[j] = temp;
}
}
}
}