用C语言实现分治法排序

本文详细介绍了如何参照《算法导论》使用C语言来实现分治法排序,通过实例代码展示了具体的实现过程。
摘要由CSDN通过智能技术生成

参考《算法导论》, 用C语言实现了分治法的排序。。。

/*********************************************************
 * MERGE_SORT.C                                          *
 * To sort n numbers by merge sort method                *
 * by Eric Brown                                         *
 *********************************************************/
 
#include<stdio.h>
#include<stdlib.h>
#define N 10
#define MAX 10000

void merge(int num[], int p, int q, int r);
void merge_sort(int num[], int p, int r);

int main(void) {
    int num[N], p, q, i;
    printf("Please input %d numbers to sort(less than %d):\n", N, MAX);
    
    for(i = 0; i < N; i++)
        scanf("%d", &num[i]);
    
    merge_sort(num, 0, N-1);
    
    for(i = 0; i < N; i++)
        printf("%d ", num[i]);
    printf("\n");
    
    system("pause");
    return 0;
}

void merge(int num[], int p, int q, int r) {
    int
快速排序是一种常用的排序算法,也可以使用C语言实现。下面是使用分治法实现快速排序的代码: ```c #include <stdio.h> // 交换两个元素的值 void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } // 将数组划分为两部分,返回划分点的下标 int partition(int arr[], int low, int high) { int pivot = arr[high]; // 选取最后一个元素作为基准 int i = (low - 1); // 小于基准的元素的索引 for (int j = low; j <= high - 1; j++) { // 如果当前元素小于或等于基准 if (arr[j] <= pivot) { i++; // 增加小于基准的元素索引 swap(&arr[i], &arr[j]); // 交换元素 } } swap(&arr[i + 1], &arr[high]); // 将基准放到正确的位置 return (i + 1);} // 快速排序函数 void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); // 划分数组 quickSort(arr, low, pi - 1); // 对划分出的左半部分进行排序 quickSort(arr, pi + 1, high); // 对划分出的右半部分进行排序 } } // 打印数组 void printArray(int arr[], int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int arr[] = {10, 7, 8, 9, 1, 5}; int n = sizeof(arr) / sizeof(arr[0]); printf("原始数组:"); printArray(arr, n); quickSort(arr, 0, n - 1); printf("排序后的数组:"); printArray(arr, n); return 0; } ``` 这个代码片段使用了递归的方式实现了快速排序算法。你可以将待排序的数组存储在 `arr` 数组中,然后调用 `quickSort` 函数进行排序。最后,使用 `printArray` 函数打印排序后的数组。运行该代码会输出以下结果: ``` 原始数组:10 7 8 9 1 5 排序后的数组:1 5 7 8 9 10 ``` 希望这个示例对你有帮助!如有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值