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; } } } }