数据结构——归并排序
来源:互联网 发布:数据库考试试题及答案 编辑:程序博客网 时间:2024/06/05 20:53
排序(sort)或分类
内部排序方法可以分为五类:插入排序、选择排序、交换排序、归并排序和分配排序。
//归并排序#include <iostream>using namespace std;// 归并排序中的合并算法void Merge(int a[], int left, int center, int len){ int *t = (int *) malloc((len-left+1) * sizeof(int)); //申请空间,大小为两个已经排序序列之和,该空间用来存放合并后的序列 int i = left; int j = center; int k = 0; while (i<center && j<len) //比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 { if (a[i] <= a[j]) t[k++] = a[i++]; else t[k++] = a[j++]; } while (i < center) //若第一个序列有剩余,直接拷贝出来粘到合并序列尾 t[k++] = a[i++]; while (j < len) //若第二个序列有剩余,直接拷贝出来粘到合并序列尾 t[k++] = a[j++]; //将排序好的序列拷贝回数组中 for (i=left,k=0; i<len; i++,k++) a[i] = t[k]; free(t);} // 归并排序void MSort(int a[], int left, int right){ if (left < right) { int center = (left + right) / 2; // 对前半部分进行排序 MSort(a, left, center); // 对后半部分进行排序 MSort(a, center+1, right); // 合并前后两部分 Merge(a, left, center+1, right+1); }}void MergeSort(int a[], int n){ MSort(a, 0, n-1); //================================= for(int i=0;i<n;i++) { if(i%5==0) cout<<endl; cout<<a[i]<<" "; } cout<<endl;} int main(){ FILE *fin=fopen("8.1.2.txt","r"); int num[80],i=0; while(fscanf(fin,"%d",&num[i])!=EOF) i++; MergeSort(num,i); fclose(fin); return 0;}
- 数据结构 — 归并排序
- 数据结构 — 归并排序
- 数据结构——归并排序
- 数据结构——归并排序
- 数据结构——归并排序
- 数据结构之排序——归并排序
- 数据结构——2路归并排序
- 数据结构与算法——归并排序
- 数据结构——归并排序算法
- 【数据结构与算法】——归并排序
- 数据结构例程——归并排序
- 数据结构与算法——归并排序
- 数据结构—有序表—归并排序
- 【数据结构与算法】——归并排序
- 数据结构之——归并排序
- 复习数据结构:排序算法(四)——归并排序
- 数据结构直接插入排序——归并排序
- 数据结构——堆排序和归并排序
- 翻转句子中单词的顺序
- cocos2d-x android 编译 iconv库
- 行转列与列转行
- 数据结构——冒泡排序
- udev 实战
- 数据结构——归并排序
- 一致性代码段和非一致性代码段
- Mysql疑问与关注点
- 水仙花数
- 开发日志:设置<DIV>内容不自动换行,及inline后width和height等失效的问题
- Android 常用代码---数据库
- (Android 基础知识) ActionBar.Tab---导航Tab(标签)
- 126页E2
- 多重继承和虚继承的内存布局