#include<stdio.h>
/*
冒泡排序好理解,稳定,空间复杂度低,不需要额外开辟数组元素的临时保存控件,编写容易。
其算法很简单,就是比较数组相邻的两个值,把大的像泡泡一样“冒”到数组后面去,一
共要执行N的平方除以2这么多次的比较和交换的操作(N为数组元素),其复杂度为Ο(n2)
*/
void print(int *a){
int i;
for(i = 0; i < 7;i++){
printf("%d ",a[i]);
}
printf("%d\n",a[i]);
}
int main(){///bubble
int i,j,temp;
int a[8] = {95, 45, 15, 78, 84, 51, 24, 12};
printf("原序列:");
print(a);
for(i = 0; i < 7;i++){//可以少循环一次 最后一次剩下最后一个元素 肯定是最大的元素 排序7趟
//temp = a[i];
for(j = 0;j < 7-i;j++){//比较数组相邻的两个值 每次把大的 冒泡到后面去
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
// index = j;
}
}
printf("第 %d 趟排序:",i+1);
print(a);
}
printf("排序后元素如下:");
print(a);
return 0;
}
/*
鸡尾酒排序 双向冒泡
void CocktailSort(int *a,int nsize)
{
int tail=nsize-1;
for (int i=0;i<tail;)
{
for (int j=tail;j>i;--j) //第一轮,先将最小的数据排到前面
{
if (a[j]<a[j-1])
{
int temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
++i; //原来i处数据已排好序,加1
for (j=i;j<tail;++j) //第二轮,将最大的数据排到后面
{
if (a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
tail--; //原tail处数据也已排好序,将其减1
}
}
*/
冒泡排序
最新推荐文章于 2024-06-07 09:15:00 发布