一个数组,把奇数放到左边,偶数放到右边,调整后有序方法和无序方法

题目

如标题(写完发现奇偶写反了……就改一下题目吧hhh)

代码

1、无序

为了方便弄个printfArray输出

void printfArray(int a[])
{
    
    
    int i;
    for (i = 0; i < 10; i++)
    {
    
    
        printf("%d ", a[i]);
    }
    putchar('\n');
}
void disorderSort(int a[])
{
    
    
    int i, j, k;
    for (i = 0, j = 9; i < j; i++, j--) //相遇退出循环
    {
    
    
        while (a[i] % 2) i++; //从左到右找偶数
        while (!(a[j] % 2)) j--; //从右到左找奇数
        k = a[i];
        a[i] = a[j];
        a[j] = k;  //交换
        printfArray(a);
    }
}

效果:

从左到右找到第一个偶数86,与从右到左第一个奇数99交换,以此类推
在这里插入图片描述

2、有序

有序是指奇数的相对位置不变,偶数的相对位置也不变

void orderSort(int a[])
{
    
    
    int i, j, k, x;
    for (i = 0; ; i++)
    {
    
    
        while (a[i] % 2) i++; //找到从左到右第一个偶数
        j = i + 1;
        while (!(a[j] % 2)) j++; //找到该偶数右边第一个奇数
        if(j > 9) break; //便利完退出循环
        for (x = j; x > i; x--) //向左冒一次泡(大概这个意思)
        {
    
    
            k = a[x];
            a[x] = a[x - 1];
            a[x - 1] = k;
        }
        printfArray(a);
    }
}

效果

从左到右找到第一个偶数86,再找到86右边第一个奇数787,冒泡;
此时i = 1,继续,i++;
同理;
越到后面要移动的数字越多;
在这里插入图片描述

3、main函数

#include <stdio.h>
#include <stdlib.h>
void printfArray(int a[]);
void disorderSort(int a[]);
int main()
{
    
    
    int a[10] = {
    
    47, 86, 787, 87, 4, 79, 8, 98, 99, 2};
    int n;
    printf("原数组为:");
    printfArray(a);
    printf("有序or无序?\n1、有序\n2、无序\n");
    scanf("%d",&n);
    switch(n)
    {
    
    
        case 1: orderSort(a);
                printf("奇偶排序后:");
                printfArray(a);
                break;
        case 2: disorderSort(a);
                printf("奇偶排序后:");
                printfArray(a);
                break;
        default:printf("输入正确编号!\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/LShang2384/article/details/104377547
今日推荐