数据结构——归并排序

来源:互联网 发布:数据库考试试题及答案 编辑:程序博客网 时间: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;}


原创粉丝点击