做推广网站公司,wordpress怎么获取数据库名,莆田网站制作公司,兰州正规的装修公司包含头文件#xff1a;程序首先包含了标准输入输出库stdio.h#xff0c;以便使用printf等函数进行输入输出操作。 定义数组和数组大小#xff1a;定义了一个宏N#xff0c;其值为5#xff0c;表示数组q的长度。数组q被初始化为{5, 3, 8, 4, 2}#xff0c;这是我们要排序… 包含头文件程序首先包含了标准输入输出库stdio.h以便使用printf等函数进行输入输出操作。 定义数组和数组大小定义了一个宏N其值为5表示数组q的长度。数组q被初始化为{5, 3, 8, 4, 2}这是我们要排序的原始数组。同时定义了一个辅助数组w用于在归并过程中临时存储数据。 归并排序函数merge_sort函数是一个递归函数它接受两个参数l和r分别表示要排序的子数组的起始和结束索引。如果子数组的长度为1即l r则不需要排序函数直接返回。函数递归地将数组分为两半分别对左半部分l到mid和右半部分mid 1到r进行排序。 在归并过程中使用三个指针i、j和k分别指向左半部分的当前元素、右半部分的当前元素和辅助数组w的当前位置。第一个while循环比较左右两部分的当前元素将较小的元素复制到辅助数组w中。接下来的两个while循环分别处理左右两部分的剩余元素。最后一个for循环将辅助数组w中的元素复制回原数组q完成归并过程。 主函数main函数是程序的入口点。调用merge_sort函数传入0和N - 1作为参数表示对整个数组q进行排序。使用一个for循环和printf函数打印排序后的数组。 运行结果程序将输出排序后的数组{2, 3, 4, 5, 8}这表示数组q已经被成功排序。 总结这个程序展示了归并排序算法的实现它通过递归地将数组分成更小的部分然后合并这些部分来排序整个数组。归并排序的时间复杂度为O(n log n)是一种稳定的排序算法。
#include stdio.h#define N 5 // 定义数组q的长度int q[N] { 5, 3, 8, 4, 2 }; // 待排序的数组
int w[N]; // 辅助数组void merge_sort(int l, int r) {if (l r)return;int mid l r 1; // 计算中间位置merge_sort(l, mid);merge_sort(mid 1, r);int i l, j mid 1, k 0;while (i mid j r) {if (q[i] q[j])w[k] q[i];elsew[k] q[j];}while (i mid)w[k] q[i];while (j r)w[k] q[j];for (i l, j 0; j k; i, j)q[i] w[j];
}int main() {merge_sort(0, N - 1);printf(Sorted array: );for (int i 0; i N; i) {printf(%d , q[i]);}printf(\n);return 0;
}