读书人

关于排序的有关问题

发布时间: 2013-01-20 10:22:40 作者: rapoo

关于排序的问题

#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的指针或者引用

读书人网 >C语言

热点推荐