归并排序(merge sort)
2006-05-10 09:11
316 查看
归并排序(merge sort)体现了分治的思想,即将一个待排序数组分为两部分,对这两个部分进行归并排序,排序后,再对两个已经排序好的数组进行合并。这种思想可以用递归方式很容易实现。归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。
实现代码如下:
其它内部排序
冒泡排序(bubble sort)
插入排序(insertion sort)
选择排序(selection sort)
希尔排序(shellsort)
快速排序(quicksort)
实现代码如下:
#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; }
其它内部排序
冒泡排序(bubble sort)
插入排序(insertion sort)
选择排序(selection sort)
希尔排序(shellsort)
快速排序(quicksort)
相关文章推荐
- 合并排序(归并排序 MergeSort)
- 常用排序算法—Merge Sort(归并排序)
- Merge Sort 归并排序
- 归并排序 Merge sort
- 排序算法(二)—归并排序(Merge sort)
- 归并排序(Merge_Sort)
- 无聊写排序之 ---- 归并排序(MergeSort) 递归实现
- 1.7 逆序数与归并排序[inversion pairs by merge sort]
- 归并排序(merge-sort)
- 【从零学习经典算法系列】分治策略实例——归并排序(Mergesort)
- 归并排序(merge sort)
- 归并排序(merge sort)
- 归并排序(mergeSort)之非递归算法
- 排序算法详解【归并排序-Merge_Sort】
- 算法第三次作业(1. 排序。对文件 largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW
- 面试之路(16)-归并排序详解(MergeSort)递归和非递归实现
- python的归并排序(mergesort)实现
- 归并排序(MergeSort)
- 归并排序(MergeSort)
- 排序算法——归并排序(Merge Sort)