三九宝宝网宝宝教育教学论文

C语言归并排序大家看我的程序哪里错了

02月28日 编辑 39baobao.com

[用c语言编写一个排序程序要求使用基数排序算法最好能详细解释]#include#define MAX_NUM_OF_KEY 8 //关键字项数的最大值#define RADIX 10 //关键字基数,此时是十进制整数的基数#define MAX_SPACE 10000 typedef int KeysType; typedef in...+阅读

用结构体?使用递归调用和分治法的归并排序c语言完整程序如下,我所见过最简洁的程序,win-tc和tc下通过: /* 归并排序 */ # include# include# include# define MAX 255 int R[MAX]; void Merge(int low,int m,int high) {/* 将两个有序的子文件R[low..m]和R[m+1..high]归并成一个有序的 */ /* 子文件R[low..high] */ int i=low,j=m+1,p=0; /* 置初始值 */ int *R1; /* R1是局部向量,若p定义为此类型指针速度更快 */ R1=(int *)malloc((high-low+1)*sizeof(int)); if(!R1) /* 申请空间失败 */ { puts("Insufficient memory available!"); return; } while(i

如何用C语言编一个归并排序的程序

#include "MergeSort.h"#includeusing namespace std;MergeSort::MergeSort(vector_list, int _len){ list.push_back(0); link.push_back(0); for (int i=0; ilen = _len;}//9 归并排序:递归-----------------------------------------------------------//具体方法:以merger_link[]提供链表功能。merger_link[i]对应在有序子序列中//merger_list[i]后一个结点在原merger_list[]中的下标;//merger_link[0]总是表示有序子序列开始的结点在merge_list[]中的下标;//st1,st2为两个有序序列的第一个结点;//将他们归并,并返回其第一个结点的下标,即merger_link[0]int MergeSort::list_merge(int st1, int st2) { int k = 0, i = st1, j = st2; while (i & j) //当两序列未检测完 if (list[i]=right) return left; int middle = (left + right)/2; //对左右两子序列进行归并 return list_merge(merge_sort(left,middle), merge_sort(middle+1,right)); }void MergeSort::out(){ int i = link[0]; int j = 0; while (i) { j++; cout

给定一个数列如何用归并排序算法把它排成升序用c语言实现

void MergeSort(int x[],int n) { //非递归归并排序

//元素数组为x,其长度为n

int i,j,k1,k2,l;

int *a;

for(i=1;i<=n-1;i=i*2)//i为插入排序的子段长度

{

for(j=1;j<=n-1;j=j+2*i)//j为进行插入排序的子段起始位置

{

a=(int *)malloc(2*i*sizeof(int));

l=0;k1=j;k2=j+i;

while((l<2*i)&(k2<=n-1)&(k2

{//子段中,比较,移至辅助内存

if(x[k1]

{

a[l++]=x[k1];k1++;

}

else

{

a[l++]=x[k2];k2++;

}

}

if((k2>n-1)||(k2>=j+2*i))

{//子段的后一段超出数组范围

for(;k1

a[l++]=x[k1];

}

else//就只有第一段就超数组了

{

if(k1>=j+i)

{

for(;(k2

a[l++]=x[k2];

}

}

for(k1=0;k1

{

x[j+k1]=a[k1];

}free(a);

}

}

}

非递归的归并排序,我以前写的。

中间malloc与free的话,是为了方便管理不定大小的空间,这里需要malloc.h的头文件

以下为关联文档:

四个数字排序的C语言程序main() {int a,b,c,d,e; scanf("%d,%d,%d,%d",&a,&b,&c,&d); if(a<b) {e=a;a=b;a=e;} if(b<c) {e=b;b=c;b=e;} if(a<b){e=a;a=b;a=e;} if(c<d) {e=c;c=d;d=e;} if(b<c) {e=b;b...

C语言程序中的选择法排序以整形数组元素为例,有数组A[10](以C语言为例描述),即A[0],A[1],…,A[8],A[9](假设其元素均互不相同)。要求对其元素排序使之递增有序。 首先以一个元素为基准,从一个方向开始扫描,比...

C语言课程设计 shell排序排序快速排序归并递归和非递归#include#include#include#includevoid shellSort(int *a,int len) { int step; int i,j; int temp; for(step=len/2; step>0;step/=2) { for(i=step;i=0 & temp0; i--) { h...

如何用C语言编一个归并排序的程序#include "MergeSort.h"#includeusing namespace std;MergeSort::MergeSort(vector_list, int _len){ list.push_back(0); link.push_back(0); for (int i=0; ilen = _len;}//...

c语言归并排序之前写过一个模版类,这里是部分代码: void Merger<T>::sub_Merger(T * array, size_t n) { if(n == 1) //~ 递归终止 return ; else if(n == 2) //~ 递归终止 { if( array[0]...

c语言编程题高手帮忙位数大小排序掌握数值排序算法程序说明代码: #include <stdio.h> int FindMaxCombination(int num) { if(num > 99999 || num <10000) { return 0;//输入检查 } int Array[5] = {0}; int i,j,MaxCombination,Temp;...

C语言二路归并排序求详解啊!看不懂递归啊!到底是怎么个过程mid的初始值为0,进入if循环之后,会首先判断大小,加入满足条件first<last时,mid的值就变成了 mid = (first+last)/2;然后会进入函数的调用,调用 merge_sort(arr, first, mid);函数,递...

随机生成10个待排序数据用C语言写出二路归并排序算法#include<stdio.h> #include<stdlib.h> #include<time.h> int b[ 10 ]; void Merge( int c[], int d[], int l, int m, int r ) { int i = l, j = m + 1, k = l; while( ( i...

高分送!如何用C语言实现归并排序算法!#include <iostream> using namespace std; void merge(int array[],int left,int right) { int temparray[right]; for(int j=left;j<=right;j++) { temparray[j]=array[j]...

推荐阅读
图文推荐