开发者社区> 问答> 正文

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

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

展开
收起
知与谁同 2018-07-20 12:15:56 2127 0
3 条回答
写回答
取消 提交回答
  • 社区管理员
    楼上的都很强。。。。答案已经很明显了
    2019-07-17 22:50:51
    赞同 展开评论 打赏
  • #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>#define KeyType int
    #define InfoType chartypedef struct
    {
    KeyType key; //关键字项
    InfoType otherdata; //其它数据项
    } RecordType;void Merge2(RecordType *r,int s,int m,int t)
    {
    int i;
    int j=m+1, k;
    int l;
    RecordType a[11];
    for (i=1; i<=t; i++)
    a[i]=r[i];
    k=s;
    i=s;
    while (i<=m && j<=t)
    {
    if (r[i].key<=r[j].key)
    a[k]=r[i++];
    else
    a[k]=r[j++];
    ++k;
    }
    for ( l=i; l<=m; ++l)
    a[k++]=r[l];
    for (l=j; l<=t; ++l)
    a[k++]=r[l];
    for (i=1; i<=t; i++)
    r[i]=a[i];
    }void MergeSort(RecordType *r,int s,int t)
    {
    int m=(s+t)/2;
    if (s>=t)
    return;
    MergeSort(r,s,m);
    MergeSort(r,m+1,t);
    Merge2(r,s,m,t);
    } //时间复杂度为O(logn)
    void main()
    {
    RecordType record[11];
    int i;
    record[0].key=0;
    srand( (unsigned)time( NULL ) );
    for( i=1;i<=10;i++)
    record[i].key = rand();
    for(i=1;i<=10;i++)
    printf("%d ",record[i].key);
    printf("\n");
    // for (i=0;i<10;i++)
    // printf("%d ",a[i]);
    MergeSort(record,1,10);
    for(i=1;i<=10;i++)
    printf("%d ",record[i].key);
    printf("\n");
    }
    2019-07-17 22:50:51
    赞同 展开评论 打赏
  • Nothing for nothing.
    #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 <= 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!!!
    2019-07-17 22:50:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载