#include<stdio.h>
#include<stdlib.h>
int main()//程序目的:将所有数字中奇数从大到小排序,偶数从小到大排序,奇数在前,偶数在后
{
int n, * p,i=0,j=0,k=0,temp,min=0;
scanf_s("%d", &n);
p =(int*) malloc(sizeof(int) * n);
if (p == NULL) exit(0);
for (i = 0; i < n; i++)
scanf_s("%d", p + i);
for(i=0;i<n;i++)
for (j = 0; j < n - i-1; j++)
if((p+j)<*(p+j+1))
{
temp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}//冒泡排序将所有数由大到小排序
for (i=n-1; i >= 0; i--)
{
if ((p + i) % 2 == 0) min = (p + i);
break;
}//记录最小的偶数
printf("%d", min);
i = 0; j = 0;
while((p + i) != min)//不是最小偶数时执行以下程序
{
if(*(p + i) % 2 == 0)//如果是偶数将其移动到目标位置其余所有数前移
{
for (j = i; j < n-k-i - 1; j++)
{
temp = *(p + j);
*(p + j) = *(p + j + 1);
(p + j + 1) = temp;
}
k++;
}
if ((p + i) % 2 != 0) i++;//如果是奇数,跳到下一个数
}
for (i = 0; i < n; i++)
printf("%d ", *(p + i));
free(p);
return 0;
}
应该是排序偶数的那一段代码,出了问题,发现偶数就把他交换到下一个数,似乎不能达到排序偶数的目的,改了一下,如下:
#include<stdio.h>
#include<stdlib.h>
int main()//程序目的:将所有数字中奇数从大到小排序,偶数从小到大排序,奇数在前,偶数在后
{
int n, * p,i=0,j=0,k=0,temp,min=0;
scanf("%d", &n);
p =(int*) malloc(sizeof(int) * n);
if (p == NULL) exit(0);
for (i = 0; i < n; i++)
scanf("%d", p + i);
for(i=0;i<n;i++)
for (j = 0; j < n - i-1; j++)
if(*(p+j)<*(p+j+1))
{
temp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}
//冒泡排序将所有数由大到小排序
// for (i=n-1; i >= 0; i--)
// {
// if (*(p + i) % 2 == 0) min = *(p + i);
// break;
// }//记录最小的偶数
//
// printf("%d", min);
//
i = 0; j = 0;
for(i=0;i<n;i++){
if(*(p+i)%2==0){
for(j=n-1-k;j>=0;j--){
if(*(p+j)%2==0){
*(p+j)=*(p+i);
break;
}
}
}
}
// while(*(p + i) != min)//不是最小偶数时执行以下程序
// {
// if(*(p + i) % 2 == 0)//如果是偶数将其移动到目标位置其余所有数前移
// {
// for (j = i; j < n-k-i - 1; j++)
// {
// temp = *(p + j);
// *(p + j) = *(p + j + 1);
// *(p + j + 1) = temp;
// }
// k++;
// }
//
// if (*(p + i) % 2 != 0)
// i++;//如果是奇数,跳到下一个数
// }
//
for (i = 0; i < n; i++)
printf("%d ", *(p + i));
free(p);
return 0;
}
有运行结果图吗?