直接插入排序:
直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。
void InsertSort(SqList *L)
{
int i,j;
for(i=2;i<L->length;i++)
{
if(L->r[i]<L->r[i-1])
{
L->r[0]=L->r[i];
for(j=i-1;j>0&&L->r[0]<L->r[j];j--)
{
L->r[j+1]=L->r[j];
}
L->r[j+1]=L->r[0];
}
}
}
简单选择排序:
简单选择排序法就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换。
void SelectSort(SqList *L)
{
int i,j;
for(i=1;i<L->length;i++)
{
min = i;
for(j=i+1;j<L->length;j++)
{
if(L->r[min]>L->r[j])
{
min = j;
}
if(i!=min)
{
swap(L,i,min);
}
}
}
}
冒泡排序:
两两比较相邻记录的关键字,如果反序则交换,知道没有反序的记录为止。
(1)void BubbleSort0(SqList *L)
{
int i,j;
for(i=1;i<L->length;i++)
{
for(j=i+1;j<L->length;j++)
{
if(L->r[i]>L->r[j])
{
swap(L,i,j);
}
}
}
}
(2)void BubbleSort(SqList *L)
{
int i,j;
for(i=1;i<L->length;i++)
{
flag = false;
for(j=L->length-1;j>=i;j--)
{
if(L->r[j]>L->r[j+1])
{
swap(L,j,j+1);
}
}
}
}
(3)void BubbleSort2(SqList *L)
{
int i,j;
Status flag = true;
for(i=1;i<L->length&&flag;i++)
{
flag = false;
for(j=L->length-1;j>=i;j--)
{
if(L->r[j]>L->r[j+1])
{
swap(L,j,j+1);
flag = true;
}
}
}
}