[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
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);// 合并
}
}
以下为关联文档:
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...