我这个代码哪里不对了呢,求解答

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

img

应该是排序偶数的那一段代码,出了问题,发现偶数就把他交换到下一个数,似乎不能达到排序偶数的目的,改了一下,如下:

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

有运行结果图吗?