归并排序之循环归并排序9.4.3
来源:互联网 发布:case when sql server 编辑:程序博客网 时间:2024/05/16 15:10
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> typedef int ElementType; void Merge(ElementType a[],ElementType tmpa[],int l,int r,int rend){//有序子列的归并 int len=rend-l+1; int lend=r-1; int tmp=l; while(l<=lend&&r<=rend){ if(a[l]>a[r]) tmpa[tmp++]=a[r++]; else tmpa[tmp++]=a[l++]; } while(l<=lend) tmpa[tmp++]=a[l++]; while(r<=rend) tmpa[tmp++]=a[r++]; /*for(int i=0;i<len;i++,rend--){ a[rend]=tmpa[rend]; } */ } /* 归并排序 - 循环实现 */ /* length = 当前有序子列的长度*/ void Merge_pass( ElementType A[], ElementType TmpA[], int N, int length ) { /* 两两归并相邻有序子列 */ int i, j; for ( i=0; i <= N-2*length; i += 2*length ) Merge( A, TmpA, i, i+length, i+2*length-1 ); if ( i+length < N ) /* 归并最后2个子列*/ Merge( A, TmpA, i, i+length, N-1); else /* 最后只剩1个子列*/ for ( j = i; j < N; j++ ) TmpA[j] = A[j]; } void Merge_Sort( ElementType A[], int N ) { int length; ElementType *TmpA; length = 1; /* 初始化子序列长度*/ TmpA = malloc( N * sizeof( ElementType ) ); if ( TmpA != NULL ) { while( length < N ) { Merge_pass( A, TmpA, N, length ); length *= 2; Merge_pass( TmpA, A, N, length ); length *= 2; } free( TmpA ); } else printf( "空间不足" ); } int main(){ srand(time(NULL)); int s[100]; for(int i=0;i<100;i++) s[i]=rand()%1000; Merge_Sort(s,100); for(int i=0;i<100;i++) printf("%d ", s[i]); return 0; }
0 0
- 归并排序之循环归并排序9.4.3
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序 之 归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- sdut 2608 Alice and Bob 二进制
- 斯坦福机器学习笔记六
- 设备树学习之(六)RTC
- 深拷贝的实现
- Java IO流
- 归并排序之循环归并排序9.4.3
- Error:Failed to open zip file. Gradle's dependency cache may be corrupt (this sometimes occurs after
- 将线下sql导入到测试环境
- session监听器中不能使用spring依赖注入
- 01、ES6 变量的扩展
- 学习设备树之(十一)Backlight
- 新建react-native项目并在genymotion模拟器上运行
- 4872: [Shoi2017]分手是祝愿
- POJ 2481 Cows 树状数组