(1)冒泡排序
头文件:
#defineMAXSIZE20
#defineEQ(a,b)((a)==(b))
#defineLT(a,b)((a)<(b))
#defineLQ(a,b)((a)<=(b))
typedefintKeyType;
typedefintInfoType;

typedefstruct...{
KeyTypekey;
InfoTypeotherinfo;
}RedType;

typedefstruct...{
RedTyper[MAXSIZE+1];
intlength;
}SqList;
源文件:
#include"sort.h"
#include"stdio.h"

voidinit(SqList&s,intw[],intn)...{
s.length=n;
for(inti=1;i<=n;i++)...{
s.r[i].key=w[i-1];
}
}

voidshow(SqLists)...{
for(inti=1;i<=s.length;i++)...{
printf("%d ",s.r[i]);
}
printf(" ");
}

voidbubbleSort(SqList&s)...{
intflag=1;
for(inti=s.length;i>=1&&flag;i--)...{
flag=0;
for(intj=1;j<=i;j++)...{
if(LT(s.r[j].key,s.r[j-1].key))...{
RedTyperc=s.r[j-1];
s.r[j-1]=s.r[j];
s.r[j]=rc;
flag=1;
}
}
}
}

voidmain()...{
intw[]=...{49,38,65,97,76,13,27,49};
intn=8;
SqLists;
init(s,w,n);
bubbleSort(s);
show(s);
}
程序执行结果:
1327384949657697
Pressanykeytocontinue
程序的复杂度为:O(n * n)。
(2)快速排序
源文件修改:
//user[low]aspivottopartfromlowtohigh.
intpartition(SqList&s,intlow,inthigh)...{
s.r[0]=s.r[low];
KeyTypekey=s.r[low].key;
while(low<high)...{
while(low<high&&s.r[high].key>=key)...{
high--;
}
s.r[low]=s.r[high];

while(low<high&&s.r[low].key<=key)...{
low++;
}
s.r[high]=s.r[0];
}
returnlow;
}

voidqSort(SqList&s,intlow,inthigh)...{
if(low<high)...{
intpivot=partition(s,low,high);
qSort(s,low,pivot-1);
qSort(s,pivot+1,high);
}
}

voidquickSort(SqList&s)...{
qSort(s,1,s.length);
}

voidmain()...{
intw[]=...{49,38,65,97,76,13,27,49};
intn=8;
SqLists;
init(s,w,n);
quickSort(s);
show(s);
}
程序执行结果:
1327384949657697
Pressanykeytocontinue
算法的复杂度为:平均O(n * log(n)),最坏O(n * n)。
本文介绍了冒泡排序和快速排序两种经典的排序算法,并通过C语言实现这两种算法。冒泡排序的时间复杂度为O(n^2),适用于小规模数据;快速排序的平均时间复杂度为O(n*log(n)),最坏情况下可达O(n^2),适用于大规模数据集。
1322

被折叠的 条评论
为什么被折叠?



