当前位置: 代码迷 >> C语言 >> [求助]精典的冒泡算法
  详细解决方案

[求助]精典的冒泡算法

热度:120   发布时间:2007-01-03 17:14:15.0
以下是引用w114725053在2007-1-3 11:17:37的发言:

那选择排序和冒泡有什么区别呢??

选择排序是一种排序方法的类型.
冒泡排序属于交换排序的一种.


----------------解决方案--------------------------------------------------------
选择:顾名思义,就是每次选出待排序中符合你目的的那个元素.

交换:通过两两交换达到排序的目的.
----------------解决方案--------------------------------------------------------
比较太多次了
void sort(float a[] , int n )
{
int i;
int flag=0;
float f;
do
{
flag=0;
for(i=0;i<n-1;i++ )
if (a[i+1]>a[i])
{
flag=1;
t=a[i];a[i]=a[i+1];a[i+1]=t;
}
}while(flag);
}

----------------解决方案--------------------------------------------------------
11楼正解
----------------解决方案--------------------------------------------------------

#include <stdio.h>
#define N 5

void main()
{
int i=0,j=0,temp=0; // 冒泡排序需要的相应变量,i和j循环变量,temp中间颠倒的变量
int grade[N]={0}; // 排列的数组

printf("请输入学员的成绩\n",N); // 为数组赋值

for(i=0;i<N;i++)
{
printf("第%d个为:", i+1);
scanf("%d",&grade[i]);
fflush(stdin);
}
// 排序公式版
for(i=N-2;i>=0;i--)// 表达式中循环变量的写法是公式?
{
for(j=N-1;j>=N-1-i;j--) // 表达式中循环变量的写法是公式?
{
if (grade[j]<grade[j-1]) // 这里的<号或者>号,决定了是排序的顺序
{
// 交换值-得固定模式
temp=grade[j];
grade[j]=grade[j-1];
grade[j-1]=temp;
}
}
}
// 显示排序结果
printf("排列后的成绩为:\n");

for(i=0;i<N;i++)
{
printf("%5d",grade[i]);
}
printf("\n");

}


----------------解决方案--------------------------------------------------------
解释的很清楚了

flag可以提前退出 减少比较次数
----------------解决方案--------------------------------------------------------
  相关解决方案