/*在sort.h文件定义用于排序的顺序表结构,如下:*/
sort.h
#define MAXSIZE 10
#define true 1
#define false 0
typedef int Status;
typedef struct
{
int r[MAXSIZE +1];/*r[0]用作哨兵或临时变量(目前还没有用到此变量的作用)*/
int length;
}SqList;
/*因在排序中大量用到的操作是数组元素的交换,将其写成函数*/
swap.c
void swap(SqList *L, int i, int j)
{
int temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
/*在讲解正真冒泡算法之前,首先看一下简单的交换排序算法*/
Bubble_Sort0.c
void Bubble_Sort0(SqList *L)
{
int i, int j;
for(i=1; ilength; i++)
{
for(j=i; j<=L->length; j++)
{
if(L->r[i] > L->r[j])
{
swap(L, i, j);
}
}
}
}
/*真正的冒泡排序算法*/
Bubble_Sort1.c
void Bubble_Sort1(SqList *L)
{
int i, int j;
for(i=1; ilength; i++)
{
for(j=L->length-1; j>=i; j++)
{
if(L->r[j]>L->r[j+1])
{
swap(L, j, j+1);
}
}
}
}
/*冒泡排序算法的优化*/
void Bubble_Sort2(SqList *L)
{
int i, int j;
Status flag = true;
for(i=1; ilength&&flag = true; 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;
}
}
}
}