分治算法。

1)快速排序:定义一个数组,使用快速排序算法将其中的元素按照从小到大的顺序进行排序。

#include <stdio.h>

#include <stdlib.h>

void QuickSort(int s[], int start, int end) {       // 定义函数QuickSort()

    int i, j;                                 // 定义变量为基本整型

    i = start;                                 // 将每组首个元素赋给i

    j = end;                                   // 将每组末尾元素赋给j

    s[0] = s[start];                           // 设置基准值

    while (i < j){

        while (i < j && s[0] < s[j])

            j--;                           // 位置左移

        if (i < j){

            s[i] = s[j];                   // 将s[j]放到s[i]的位置上

            i++;                           // 位置右移

}

        while (i < j && s[i] <= s[0])

            i++;                           // 位置右移

        if (i < j){

            s[j] = s[i];               // 将大于基准值的s[j]放到s[i]位置

            j--;                   // 位置右移

        }

    }

    s[i] = s[0];                           // 将基准值放入指定位置

    if (start < i)

        QuickSort(s, start, j - 1);         // 对分割出的部分递归调用函数QuickSort()

    if (i < end)

        QuickSort(s, j + 1, end);

}

int main(int argc, char const *argv[]) {

    int a[11], i;                          // 定义数组及变量为基本整型

    printf("请输入10个数:\n");

    for (i = 1; i <= 10; i++)

        scanf("%d", &a[i]);            // 从键盘中输入10个要进行排序的数

    QuickSort(a, 1, 10);            // 调用QuickSort()函数进行排序

    printf("排序后的顺序是:\n");

    for (i = 1; i <= 10; i++)

        printf("%5d", a[i]);    // 输出排好序的数组

    printf("\n");

}

2)

归并排序:定义一个数组,使用快速排序算法将其中的元素按照从小到大的顺序进行排序。

1)

#include <stdio.h>

#include <stdlib.h>

void QuickSort(int s[], int start, int end) {       // 定义函数QuickSort()

    int i, j;                                 // 定义变量为基本整型

    i = start;                                 // 将每组首个元素赋给i

    j = end;                                   // 将每组末尾元素赋给j

    s[0] = s[start];                           // 设置基准值

    while (i < j){

        while (i < j && s[0] < s[j])

            j--;                           // 位置左移

        if (i < j){

            s[i] = s[j];                   // 将s[j]放到s[i]的位置上

            i++;                           // 位置右移

}

        while (i < j && s[i] <= s[0])

            i++;                           // 位置右移

        if (i < j){

            s[j] = s[i];               // 将大于基准值的s[j]放到s[i]位置

            j--;                   // 位置右移

        }

    }

    s[i] = s[0];                           // 将基准值放入指定位置

    if (start < i)

        QuickSort(s, start, j - 1);         // 对分割出的部分递归调用函数QuickSort()

    if (i < end)

        QuickSort(s, j + 1, end);

}

int main(int argc, char const *argv[]) {

    int a[11], i;                          // 定义数组及变量为基本整型

    printf("请输入10个数:\n");

    for (i = 1; i <= 10; i++)

        scanf("%d", &a[i]);            // 从键盘中输入10个要进行排序的数

    QuickSort(a, 1, 10);            // 调用QuickSort()函数进行排序

    printf("排序后的顺序是:\n");

    for (i = 1; i <= 10; i++)

        printf("%5d", a[i]);    // 输出排好序的数组

    printf("\n");

}

   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值