首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于排序的有关问题

2013-01-20 
关于排序的问题#includestdio.h#includestdlib.h#define MAXSIZE 20typedef int KeyTypetypedef stru

关于排序的问题

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
typedef int KeyType;
typedef struct{
KeyType key;
}RedType;
typedef struct{
RedType r[MAXSIZE+1];  //r[0]闲置或作哨兵
int length;
}SqList;

void InsertSort (SqList L)
{   
    int i,j;
    for (i=2; i < L.length; i++)
          if (L.r[i].key < L.r[i-1].key) 
          {
                L.r[0] = L.r[i]; L.r[i] = L.r[i-1]; 
            for (j=i-2 ; L.r[0].key < L.r[j].key ; j--)
                       L.r[j+1] = L.r[j];
                L.r[j+1] = L.r[0];
           }
}//InsertSort

void SelectSort(SqList L)
{   
    int temp,i,j,k;
    for(i=1;i<L.length;i++)
    {   
        j=i;
        for(k= i + 1;  k < L.length;  k++)   
            if  (L.r[j].key < L.r[k].key)  j= k;
        if(i!=j) 
        {
                  temp = L.r[i].key;
                  L.r[i].key = L.r[j].key;
                  L.r[j].key = temp;
        }
     }
}//SelectSort
void Merge(RedType r[],int s,int t,int m)
{
     RedType r_temp[20];
     int i=s,j=m+1,k;
     for(k=0 ; k <= t-s ; k++)
     {
     if (i == m+1)
          r_temp[k].key=r[j++].key;
     if (j==t+1)
          r_temp[k].key=r[i++].key;
     if (r[i].key < r[j].key)  
          r_temp[k].key=r[i++].key;
     else r_temp[k].key=r[j++].key;
     }
     for (i=s,j=0 ; i <= t ;i++,j++)
         r[i].key = r_temp[j].key;
}
void MSort(RedType r[],int s,int t)
{
     int m=0;
     if(s<t)
     {
     m=(s+t)/2;


     MSort(r,s,m);
     MSort(r,m+1,t);
     Merge(r,s,t,m);
     }
}
void MergeSort(SqList L)// 将顺序表 L 进行归并排序
{   
    MSort(L.r, 1, L.length ); 
}//MergeSort


void Display(SqList L)
{
     for(int i=1 ; i < L.length ; i++)
         printf("%5d",L.r[i].key);
     printf("\n");
}
int main()
{
    SqList L;
    int array[]={0,49,38,65,97,76,13,27,49,74,31,51,59};
    L.length=13;
    for(int i=0 ;i<13 ;i++)
         L.r[i].key = array[i];
    
    InsertSort(L);
    Display(L);
    
    SelectSort(L);
    Display(L);
    
    MergeSort(L);
    Display(L);
    system("pause");
    return 0;
}

求助 结果能输出但没有排序 有什么问题 c merge
[解决办法]
结构体传参是传值的,你要改成传递SqlList的指针或者引用

热点排行