⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgsort.c

📁 从各种VC源码中精选出来
💻 C
字号:
//归并排序算法设计。#define MAX 16   	//元素个数的最大值int R[MAX]={9,2,13,5,10,16,17,11,4,6,8,1,7} ; //用数组来储存元素int R1[MAX]; 		//辅助数组//归并两个有序文件段 : MERGE ( int P[ ],int Q[ ],int low,int mid,int high ){	int	i,j,k;	i=low;j=mid;k=low;	while ( i<mid && j<high )		//取小者复制		if ( P[i] <= P[j] ) Q[k++] = P[i++];		else Q[k++] = P[j++];	while ( i<mid )  Q[k++] = P[i++];//复制第一个文件的剩余元素	while ( j<high )  Q[k++] = P[j++];//复制第二个文件的剩余元素}//对文件进行一遍归并操作 : MERGEPASS ( int M[ ], int N[ ],int length,int n){	int	i,j;	i = 0;	//指向第一对子文件的起始端	while ( i + 2*length - 1 < n ) {//归并两个长度为length的子文件		MERGE ( M,N,i,i+length,i+2*length ) ;		i+=2*length;		//指向下一对子文件的起始端		}	if  ( i + length < n )		MERGE ( M,N,i,i+length,n ) ; //第二个子文件长度小于length	else for ( j=i;j<n;j++ ) N[j] = M[j] ;//将最后一个子文件复制到N中}//对整个文件进行二路归并排序 : MERGESORT (int S[ ], int D[ ],int n) //排序结果仍然在S[ ]中{	int length = 1;	//从单个元素开始进行归并	while ( length < n ) {	//只要整个文件还可以分成两个以上子文件		MERGEPASS ( S,D,length,n); //进行一遍归并:S[n] ---> D[n]		length *= 2; //加大子文件的长度		MERGEPASS ( D,S,length,n); //再进行一遍归并,结果返回到S[ ]中		length *= 2; //加大子文件的长度		}}main ( ){   	int n=13;		//实际元素个数	MERGESORT (R,R1,n); //调用归并排序算法	while (1) ; //在这一行设置断点,中止程序运行,以便观察程序运行的结果 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -