//*************************************
// 冒泡排序法 (比较,交换)
// 思路: 需要两个循环,内循环一次获得一个极小值 ,外循环n-1次排序,内循环n-i次比较,纵向排列数据,从底部开始比较,确保数值小的朝上冒,符合冒泡的形象表达,否则就是沉石排序了。
// 原子操作是: 比较,交换
// 改进: 增加置换标志位
Status BubbleSort(ElemType A[],NumType n)
{
ElemType temp;// 用于交换寄存
int FlagSwap=0; // 置换标志
for(int i=0; i<n-1; i++) // 进行n-1次排序
{
FlagSwap=0; // 开始未发生置换
for(int j=n-1; j>=i; j--)// 特别注意这里的游标j ,从底部开始比较
{
if(A[j-1]>A[j])
{
temp= A[j];
A[j]= A[j-1];
A[j-1]=temp;
FlagSwap=1; // 发生置换
}/// if
}/// for
if(FlagSwap==0) break;// 无置换,说明已经有序了,无需再比较了。
}/// for
return OK;
}/// BubbleSort
//*************
// 打印有序序列
void print(ElemType A[],NumType n)
{
for(int i=0;i<n;i++)
{
printf("%d ", A[i]);
}
printf("\n");
}
// 冒泡排序法 (比较,交换)
// 思路: 需要两个循环,内循环一次获得一个极小值 ,外循环n-1次排序,内循环n-i次比较,纵向排列数据,从底部开始比较,确保数值小的朝上冒,符合冒泡的形象表达,否则就是沉石排序了。
// 原子操作是: 比较,交换
// 改进: 增加置换标志位
Status BubbleSort(ElemType A[],NumType n)
{
ElemType temp;// 用于交换寄存
int FlagSwap=0; // 置换标志
for(int i=0; i<n-1; i++) // 进行n-1次排序
{
FlagSwap=0; // 开始未发生置换
for(int j=n-1; j>=i; j--)// 特别注意这里的游标j ,从底部开始比较
{
if(A[j-1]>A[j])
{
temp= A[j];
A[j]= A[j-1];
A[j-1]=temp;
FlagSwap=1; // 发生置换
}/// if
}/// for
if(FlagSwap==0) break;// 无置换,说明已经有序了,无需再比较了。
}/// for
return OK;
}/// BubbleSort
//*************
// 打印有序序列
void print(ElemType A[],NumType n)
{
for(int i=0;i<n;i++)
{
printf("%d ", A[i]);
}
printf("\n");
}