#include
#include
#define LEN 100 /*数组长度上限*/
#define elemType int /*元素类型*/
/*输入数组*/
void inputArr (elemType arr[], int len) {
int i;
for (i=0; iscanf ("%d",&arr[i]);
putchar ('\n');
}
/*升序冒泡排序*/
/*参数说明:*/
/*int arr[]:排序目标数组*/
/*int len:元素个数*/
void bubbleSortAsc (elemType arr[], int len) {
elemType temp;
int i, j;
for (i=0; ifor (j=0;j if (arr[j] > arr[j+1]) { /*相邻元素比较,逆序则交换*/
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
/*打印数组*/
void printArr (elemType arr[], int len) {
int i;
for (i=0; iprintf ("%d\t",arr[i]);
putchar ('\n');
}
int main (void) {
elemType arr[LEN];
elemType arrOdd[LEN], arrEven[LEN]; /*存储奇数、偶数*/
int len, oddLen, evenLen;
int i, j ,k;
printf ("请输入数组长度:");
scanf ("%d",&len);
printf ("请输入数组内容:\n");
inputArr (arr, len);
/*先分奇偶,后分别排序,最终合并*/
for (i=0, j=0, k=0; iif (arr[i]%2) {
arrOdd[j] = arr[i];
j++;
}
else {
arrEven[k] = arr[i];
k++;
}
}
oddLen = j;
evenLen = k;
bubbleSortAsc (arrOdd, oddLen);
bubbleSortAsc (arrEven, evenLen);
for (k=0, i=0; karr[i] = arrEven[k];
for (j=0; jarr[i] = arrOdd[j];
printArr (arr,len);
putchar ('\n');
getch (); /*屏幕暂留*/
free (arr);
return 0;
}
运行结果
注:运行结果略去输入数组部分
#include
void sort(int a[], int n) {
int i,j,t,k;
for(i = 0; i < n - 1;++i) {
k = i;
for(j = i + 1; j < n; ++j) {
if(a[k] > a[j]) k = j;
}
if(k != i) {
t = a[i];
a[i] = a[k];
a[k] = t;
}
}
}
int grouping(int a[], int n) {
int i = 0,j = n - 1,t,k,m = 0;
for(k = 0;k < n; ++k) if(a[k]%2 == 0) ++m; //统计偶数个数
while(i <= j) {
while(a[i]%2 == 0 && i <= m) ++i; // 从前往后找奇数,找到后,索引i停在奇数处
while(a[j]%2 == 1 && j >= n - m) --j; // 从后往前找偶数,找到后,索引j停在偶数处
if(a[i]%2 && a[j]%2 == 0) { // 确认,如果前面是奇数,且后面是偶数,则进行位置交换
t = a[i];
a[i] = a[j];
a[j] = t;
++i; // 交换后修改索引,避免数组存取越界
--j;
}
}
return m;
}
void show(int a[], int n) {
int i;
for(i = 0; i < n; ++i)
printf("%d ",a[i]);
printf("\n");
}
int main() {
int a[] = {23,21,20,35,16,18,19,75,29,28,86,23,36,94,56,88,70,37,69,55,38,12};
int m,n = sizeof(a)/sizeof(a[0]);
printf("分组前:\n");
show(a,n);
//sort(a,n);
m = grouping(a,n);//分组,并获取偶数个数
printf("偶数%d个。分组后:\n",m);
show(a,n);
sort(a,m);//前面的偶数排序
sort(a + m,n - m);//后面的奇数排序
printf("排序后:\n");
show(a,n);
return 0;
}
#include
#include
int main( void )
{
int i,j,k=0,t=0,temp,n;
int *p,*q,*r;
printf("请输入数组元素个数n=");
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);
printf("请输入元素(以空格分隔)\n");
for(i=0;i scanf("%d",&p[i]); q=(int *)malloc(sizeof(int)*n); r=(int *)malloc(sizeof(int)*n); for(i=0;i { if(p[i]%2==0) { q[k]=p[i]; k++; } else { r[t]=p[i]; t++; } } for(i=0;i for(j=0;j if(q[j]>q[j+1]) { temp=q[j]; q[j]=q[j+1]; q[j+1]=temp; } for(i=0;i for(j=0;j if(r[j]>r[j+1]) { temp=r[j]; r[j]=r[j+1]; r[j+1]=temp; } for(i=0;i printf("%3d",q[i]); for(i=0;i printf("%3d",r[i]); printf("\n"); return 0; }