当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

急求数据结构C语言版算法输入一组整数对该序列进行归并排序和

更新:02-28 整理:39baobao.com
字体:

[C语言程序设计实现输入20个整数数据按从大到小排序计算出]#include<stdio.h> int main() { int a[20],i,j,s; double sum=0,average; for(i=0;i<20;i++){ scanf("%d",&a[i]); sum+=a[i]; } average=sum/20; for(i=1;i<20;i++) for(j=0...+阅读

给你一个归并排序的具体算法和分析: 两路归并排序算法思路: ①. 把n个记录看成n个长度为l的有序子表 ; ②. 进行两两归并使记录关键字有序,得到n/2个长度为2的有序子表; ③. 重复第②步直到所有记录归并成一个长度为n的有序表为止; 具体算法: // 归并操作 templatestatic void Merge (typearray[], int p, int q, int r){ int i , k ; int begin1 , end1 , begin2 , end2 ; int* temp = (int*)malloc((r-p)*sizeof(int)) ; begin1 = p ; end1 = q ; begin2 = q+1 ; end2 = r ; k = 0 ; while (begin1

随机生成10个待排序数据用C语言写出二路归并排序算法

#include #include #include 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 <= m ) && ( j <= r ) ) if( c[ i ] <= c[ j ] ) d[ k++ ] = c[ i++ ]; else d[ k++ ] = c[ j++ ]; if( i > m ) for( int q = j; q <= r; q++ ) d[ k++ ] = c[ q ]; else for( int q = i; q <= m; q++ ) d[ k++ ] = c[ q ]; }

void Copy( int c[], int d[], int n1, int n2 ) { for( int i = n1; i <= n2; i++ ) c[ i ] = d[ i ]; }

void MergeSort( int a[], int left, int right ) { if( left < right ) { int i = ( left + right ) / 2; //取中点,分成两路 MergeSort( a, left, i ); MergeSort( a, i + 1, right ); Merge( a, b, left, i, right ); //合并到数组b Copy( a, b, left, right ); //复制到数组a } }

int main() { int a[ 10 ], i; srand( time( 0 ) ); for( i = 0; i < 10; i++ ) a[ i ] = rand() % 100; //随机生成 for( i = 0; i < 10; i++ ) //输出随机生成的数据 printf( "%d\t", a[ i ] ); printf( "\n" ); MergeSort( a, 0, 9 ); for( i = 0; i < 10; i++ ) //输出排序后的结果 printf( "%d\t", a[ i ] ); printf( "\n" ); return 0; }

//在vc++6.0上调试运行成功。若有不明白的地方,call me!!!

随机生成数据,每次测试数据会有所不同,但都是按小到大排列!!

C语言归并法排序

这个我以前回答过,就是不知道你能不能看懂,不过既然你学了冒泡法应该没问题吧,不懂请继续追问,可行望采纳:

#include

#include

#include

#define Several_lengths 10

void Merge(int *R,int low,int m,int high);

// 这个函数用来将两个排好序的数组进行合并

void MergeSort(int R[],int low,int high);

//这个函数用来将问题细分

int main(void)

{

int i;

int a[Several_lengths];

int low=0,high=Several_lengths-1;

printf("请输入%d个正整数:\n",Several_lengths);

for (i = 0; i < Several_lengths; i++)

{

rescan:

if(scanf("%d",&a[i])!=1)

{fflush(stdin);printf("非法输入!\n");goto rescan;}

//输入10个数,并判断是否为正整数

}

MergeSort(a,low,high);

for(i=low;i<=high;i++)

printf("%d ",a[i]);

printf("\n");

return 0;

}

void Merge(int *R,int low,int m,int high)

{

int i=low,j=m+1,p=0;

int *R1;

// 动态分配内存,分给左右2个数组m和high(他这里倒不如用Left和Right更清楚)

R1=(int *)malloc((high-low+1)*sizeof(int));

//只要有一个数组到达了尾部就要跳出

if(!R1) return;

// 进行合并

// 把较小的那个数据放到结果数组里, 同时移动指针

while(i<=m&j<=high)

R1[p++]=(R[i]<=R[j])?R[i++]:R[j++];

//如果 m 还有元素,把剩下的数据直接放到结果数组

while(i<=m)

R1[p++]=R[i++];

//如果 high 还有元素,把剩下的数据直接放到结果数组

while(j<=high)

R1[p++]=R[j++];

//把结果数组 复制 到 数组R 里

for(p=0,i=low;i<=high;p++,i++)

R[i]=R1[p];

}

void MergeSort(int R[],int low,int high)

{

int mid;

if(low {

// 归并的基本思想

mid=(low+high)/2;

MergeSort(R,low,mid);// 排左边

MergeSort(R,mid+1,high);// 排右边

Merge(R,low,mid,high);// 合并

}

}

本文地址:https://www.39baobao.com/show/29_47156.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

c语言整数数组排序#include"stdio.h" #define N 10 void sort(int a[],int method) { int i,k,t,j; switch(method) { case 1: for(i=0;i<N;i++) { for(j=0;j<N;j++) { if(a[j]>a[i]) { t=a[i];...

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 voidorder_print(intn) { if(n{ printf("%d",n); return; } order_print(n/10); printf("%5d",n%10); } void reverse_print(intn) { if(n{ printf("%-5d",n); return; }...

随机生成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"stdio.h" #include"stdlib.h" #include "string.h" #define Max 100 //假设文件长度 typedef struct{ //定义记录类型 int key; //关键字项 }RecType; typedef RecType Se...

高分送!如何用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]...

输入10个整数用C语言随机输入10个整数用冒泡排序法对这些整数printf("plese input the number\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) /*冒泡排序*/ for(j=1;j<n-i ;j++) if(a[j-1]>a[j] ) { temp=a[j-1]; a[j-1]=a...