数据结构 排序 交换排序

本文介绍了冒泡排序和快速排序两种经典的排序算法,并通过C语言实现这两种算法。冒泡排序的时间复杂度为O(n^2),适用于小规模数据;快速排序的平均时间复杂度为O(n*log(n)),最坏情况下可达O(n^2),适用于大规模数据集。

(1)冒泡排序

头文件:

#defineMAXSIZE20

#defineEQ(a,b)((a)==(b))
#defineLT(a,b)((a)<(b))
#defineLQ(a,b)((a)<=(b))

typedef
intKeyType;

typedef
intInfoType;

typedef
struct...{
KeyTypekey;
InfoTypeotherinfo;
}
RedType;

typedef
struct...{
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
Pressanykeyto
continue

程序的复杂度为: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
Pressanykeyto
continue

算法的复杂度为:平均O(n * log(n)),最坏O(n * n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值