2024.02.06作业

1.现有无序序列数组为{23,24,12,5,33,5,34,7},请使用以下排序实现编程

函数1:请使用冒泡排序实现升序排序
函数2:请使用简单选择排序实现升序排序
函数3:请使用直接插入排序实现升序排序
函数4:请使用插入排序实现升序排序

#include 
#include 

void bubble_sort(int a[], int n)
{
    for (int i = n; i > 1; i--)
    {
        for (int j = 0; j < i; j++)
        {
            if (a[j] > a[j + 1])
            {
                a[j] += a[j + 1];
                a[j + 1] = a[j] - a[j + 1];
                a[j] -= a[j + 1];
            }
        }
    }

    printf("冒泡排序:");
    for (int i = 0; i < n; i++)
    {
        printf("%4d", a[i]);
    }
    puts("");
}

void selection_sort(int a[], int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = i; j < n; j++)
        {
            if (a[i] > a[j])
            {
                a[i] += a[j];
                a[j] = a[i] - a[j];
                a[i] -= a[j];
            }
        }
    }

    printf("选择排序:");
    for (int i = 0; i < n; i++)
    {
        printf("%4d", a[i]);
    }
    puts("");
}

void insert_sort(int a[], int n)
{
    for (int i = 1; i < n; i++)
    {
        if (a[i] < a[i - 1])
        {
            int t = a[i];

            int j = i - 1;
            for (; j >= 0 && a[j] > t; j--)
            {
                a[j + 1] = a[j];
            }

            a[j + 1] = t;
        }
        
    }

    printf("直接插入排序:");
    for (int i = 0; i < n; i++)
    {
        printf("%4d", a[i]);
    }
    puts("");
}

void quick_sort(int a[], int l, int r)
{
    if (l < r)
    {
        int i = l, j = r, n = a[l];
        while (i < j)
        {
            while (i < j && a[j] >= n)
            {
                j--;
            }
            if (i < j)
            {
                a[i++] = a[j];
            }

            while (i < j && a[i] < n)
            {
                i++;
            }
            if (i < j)
            {
                a[j--] = a[i];
            }
        }

        a[i] = n;
        quick_sort(a, l, i - 1);
        quick_sort(a, i + 1, r);
    }
}

int main()
{
    int a[] = {23,24,12,5,33,5,34,7};
    int b[] = {23,24,12,5,33,5,34,7};
    int c[] = {23,24,12,5,33,5,34,7};
    int d[] = {23,24,12,5,33,5,34,7};
    int len = sizeof(a) / sizeof(a[0]);

    bubble_sort(a, len);
    selection_sort(b, len);
    insert_sort(c, len);
    quick_sort(d, 0, len - 1);

    printf("快速排序:");
    for (int i = 0; i < len; i++)
    {
        printf("%4d", d[i]);
    }
    puts("");

    return 0;
}

2024.02.06作业_第1张图片

2.写了个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如:调用DigitSum(1729),则返回1+7+2+9,它的和是19,输入1729,输出19

#include 
#include 

int DigitSum(int n)
{
    if (0 == n)
    {
        return 0;
    }

    return (n % 10) + DigitSum(n / 10);
}

int main()
{
    int n;

    printf("请输入数字:");
    scanf("%d", &n);
    printf("位数之和:%d\n", DigitSum(n));

    return 0;
}

2024.02.06作业_第2张图片

3.写一个宏,可以将一个int型整数的二进制位的奇数位和偶数位交换

#include 
#include 

#define swap(num) (((num&0x55555555)<<1)+((num&0xaaaaaaaa)>>1))

int main()
{
    int a = 10;

    printf("%d\n", swap(a));

    return 0;
}

你可能感兴趣的:(算法,排序算法,数据结构)