归并排序(2-路)
来源:互联网 发布:数据库王珊第5版答案 编辑:程序博客网 时间:2024/05/17 07:18
核心代码:
/*将相邻的有序区间SR[i...m]和SR[m+1,n]归并为有序的TR[i...n]*/void Merge(RcdType SR[], RcdType TR[], int i, int m, int n){int j, k;for (j = m + 1, k = i; i <= m && j <= n; k++) {if (SR[i].key <= SR[j].key) {//'<='改为'<'排序会变不稳定TR[k].key = SR[i++].key;}else TR[k].key = SR[j++].key;}while (i <= m) TR[k++].key = SR[i++].key;while (j <= n) TR[k++].key = SR[j++].key;}/*R1,R2交替归并*/void MergeSort(RcdType R1[], RcdType R2[], int i, int s, int t){/*i%2 == 1 R1归并排序到R2*/int m;if (s == t) {if (i % 2 == 1)R2[s] = R1[s];//单个元素直接复制过去}else {m = (s + t) / 2;MergeSort(R1, R2, i + 1, s, m);MergeSort(R1, R2, i + 1, m + 1, t);if (i % 2 == 1) Merge(R1, R2, s, m, t);else Merge(R2, R1, s, m, t);}}
#include <stdio.h>#include <stdlib.h>#include "data_structure.h"#include "msort.h"Status InitRcdList(RcdList &L, KeyType key[], int n){if (n <= 0) return ERROR;L.rcd = (RcdType*)malloc((n + 1)*sizeof(RcdType));if (L.rcd == NULL) return ERROR;L.length = n;for (int i = 1; i <= n; i++)L.rcd[i].key = key[i - 1];return OK;}void PrintRcdList(RcdList list){for (int i = 1; i <= list.length; i++)printf("%d ", list.rcd[i].key);printf("\n");}int main(){RcdList list;KeyType key[7] = { 42, 30, 68, 98, 86, 15, 57 };InitRcdList(list, key, 7);PrintRcdList(list);RcdType *R;R = (RcdType*)malloc((list.length + 1)*sizeof(RcdType));MergeSort(list.rcd, R, 0, 1, list.length);PrintRcdList(list);system("pause");return 0;}
0 0
- 归并排序(2-路归并排序)
- 2路归并排序
- 2-路归并排序
- 2-路归并排序
- 归并排序(2-路)
- 2路归并排序
- 10.归并排序——2路归并排序
- java实现排序算法之归并排序(2路归并)
- 囧...2路归并排序..
- 归并排序(2路)
- 2-路归并排序算法
- 2路归并排序算法
- 2-路归并排序详解
- 排序 - 归并排序 [2]
- 归并排序:二路归并
- 归并排序--二路归并
- 归并排序、二路归并排序
- 数据结构——2路归并排序
- 万万不要自己发明语法
- Java中可变长参数的使用及注意事项
- 【坑】当java的环境变量配置正确还是不能运行eclipse的情况
- 带参数的单例模式遇到的问题
- RSA算法原理
- 归并排序(2-路)
- android开发技术博客
- PostgreSQL学习手册(客户端命令<二>)
- Hibernate的二级缓存
- hdu5009Paint Pearls dp
- mysql 横表和纵表转换
- sql替换NOT IN语句
- 秒杀多线程第六篇---经典线程同步 事件Event
- nyoj--914--Yougth的最大化(二分查找)