常规冒泡排序:
#include <stdio.h>
#define MAXSIZE 20
#define TRUE 1
#define FALSE 0
typedef struct
{
int r[MAXSIZE+1];
int Length;
}SqList;
void swapvalue (SqList *L, int i, int j)
{
int temp;
temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
int main ()
{
SqList L;
int i, j;
scanf("%d", &(L.Length));
for(i = 0; i < L.Length; i++)
{
scanf("%d", &(L.r[i]));
}
for(i = 0; i < L.Length && flag; i++)
{
for(j = 0; j < L.Length-i; j++)
{
if(L.r[j] > L.r[j+1])
{
swapvalue(&L, j , j+1);
}
}
}
for(i = 0; i < L.Length; i++)
{
printf("%d\n", L.r[i]);
}
return 0;
}
冒泡排序算法改进:通过加入flag
#include <stdio.h>
#define MAXSIZE 20
#define TRUE 1
#define FALSE 0
typedef struct
{
int r[MAXSIZE+1];
int Length;
}SqList;
void swapvalue (SqList *L, int i, int j)
{
int temp;
temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
int main ()
{
SqList L;
int i, j, flag;
scanf("%d", &(L.Length));
for(i = 0; i < L.Length; i++)
{
scanf("%d", &(L.r[i]));
}
flag = TRUE;
for(i = 0; i < L.Length && flag; i++)//flag为FALSE时退出循环
{
flag = FALSE;
for(j = 0; j < L.Length-i; j++)
{
if(L.r[j] > L.r[j+1])
{
swapvalue(&L, j , j+1);
flag = TRUE;
}
}
}
for(i = 0; i < L.Length; i++)
{
printf("%d\n", L.r[i]);
}
return 0;
}