归并排序(merge sort)算法实现
来源:互联网 发布:javascript 抢购 编辑:程序博客网 时间:2024/03/29 05:41
归并排序(merge sort)体现了分治的思想,即将一个待排序数组分为两部分,对这两个部分进行归并排序,排序后,再对两个已经排序好的数组进行合并。这种思想可以用递归方式很容易实现。归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。
实现代码如下:
#include <stdio.h>
#include "common.h"
void merge(int data[], int p, int q, int r)
{
int i, j, k, n1, n2;
n1 = q - p + 1;
n2 = r - q;
int L[n1];
int R[n2];
for(i = 0, k = p; i < n1; i++, k++)
L[i] = data[k];
for(i = 0, k = q + 1; i < n2; i++, k++)
R[i] = data[k];
for(k = p, i = 0, j = 0; i < n1 && j < n2; k++)
{
if(L[i] > R[j])
{
data[k] = L[i];
i++;
}
else
{
data[k] = R[j];
j++;
}
}
if(i < n1)
{
for(j = i; j < n1; j++, k++)
data[k] = L[j];
}
if(j < n2)
{
for(i = j; i < n2; i++, k++)
data[k] = R[i];
}
}
void merge_sort(int data[], int p, int r)
{
if(p < r)
{
int q = (p + r) / 2;
merge_sort(data, p, q);
merge_sort(data, q + 1, r);
merge(data, p, q, r);
}
}
void test_merge_sort()
{
int data[] = {44, 12, 145, -123, -1, 0, 121};
printf("-------------------------------merge sort----------------------------/n");
out_int_array(data, 7);
merge_sort(data, 0, 6);
out_int_array(data, 7);
}
int main()
{
test_merge_sort();
return 0;
}
国内最棒的Google Android技术社区(eoeandroid),欢迎访问!
《银河系列原创教程》发布
《Java Web开发速学宝典》出版,欢迎定购
实现代码如下:
#include <stdio.h>
#include "common.h"
void merge(int data[], int p, int q, int r)
{
int i, j, k, n1, n2;
n1 = q - p + 1;
n2 = r - q;
int L[n1];
int R[n2];
for(i = 0, k = p; i < n1; i++, k++)
L[i] = data[k];
for(i = 0, k = q + 1; i < n2; i++, k++)
R[i] = data[k];
for(k = p, i = 0, j = 0; i < n1 && j < n2; k++)
{
if(L[i] > R[j])
{
data[k] = L[i];
i++;
}
else
{
data[k] = R[j];
j++;
}
}
if(i < n1)
{
for(j = i; j < n1; j++, k++)
data[k] = L[j];
}
if(j < n2)
{
for(i = j; i < n2; i++, k++)
data[k] = R[i];
}
}
void merge_sort(int data[], int p, int r)
{
if(p < r)
{
int q = (p + r) / 2;
merge_sort(data, p, q);
merge_sort(data, q + 1, r);
merge(data, p, q, r);
}
}
void test_merge_sort()
{
int data[] = {44, 12, 145, -123, -1, 0, 121};
printf("-------------------------------merge sort----------------------------/n");
out_int_array(data, 7);
merge_sort(data, 0, 6);
out_int_array(data, 7);
}
int main()
{
test_merge_sort();
return 0;
}
国内最棒的Google Android技术社区(eoeandroid),欢迎访问!
《银河系列原创教程》发布
《Java Web开发速学宝典》出版,欢迎定购
- Java实现归并排序(Merge-Sort)算法
- 归并排序(merge sort)算法实现
- 归并排序(merge sort)算法实现
- 【算法】归并排序 merge sort
- 归并(Merge Sort)排序算法
- 算法-归并排序(Merge-Sort)
- 用Java实现归并排序(Merge-Sort)算法
- 经典排序算法 - 归并排序Merge sort
- 经典排序算法 - 归并排序Merge sort
- 经典排序算法 - 归并排序Merge sort
- 经典排序算法 - 归并排序Merge sort
- 【排序算法】 归并排序 merge sort
- 归并排序(Merge sort)算法
- 归并排序(Merge sort)算法
- 归并排序算法——Merge Sort
- 归并排序(merge sort)的实现
- 归并排序(merge sort)c++实现
- 归并排序(merge sort)
- 通过MVC模式将Web视图和逻辑代码分离
- 一个智能机器人的语录
- 选择排序(selection sort)算法实现
- 希尔排序(shellsort)算法实现
- 在Firefox中通过AJAX跨域访问Web资源
- 归并排序(merge sort)算法实现
- 快速排序(quicksort)算法实现
- Java 6 Hotspot的性能将有可能超越编译型语言
- SQL Server各种导入导出数据方式的比较
- 【转载】如何从课堂与教学内容两方面提高培训效率
- 【转载】李开复宣布与金山合作 谷歌迈出中国第三步
- 遇到个问题想发帖、发现积分不够、有高手路过指点一下吧!
- Java SE6调用Java编译器的两种新方法
- 得到第K个大的数算法研究