首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个冒泡排序算法,问问哪个步骤最优

2012-08-03 
一个冒泡排序算法,问问哪个方法最优!要求就是一串数,用冒泡法由小到大排列,附加要求就是,前面已经是顺序排

一个冒泡排序算法,问问哪个方法最优!
要求就是一串数,用冒泡法由小到大排列,附加要求就是,前面已经是顺序排列好的就不需要去比较了!  
以5个数为例 法一 :
#include <stdio.h>
void main()
{  
int a[5],i,j,k,t,m;
k=0;
for(i=0;i<5;i++)  
scanf("%d",&a[i]);
for(i=0;i<5;i++)
{
for(j=4;j>=k;j--)
{
if(a[j]<a[j-1])
{
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
m=j;
}
}
k=m;
}
for(i=0;i<5;i++)
printf("%d",a[i]);

}

法二:
#include <stdio.h>
void main ()
{
int lenth=5;
int n=0,temp,i;
int a[5];
for(i=0;i<5;i++)scanf("%d",&a[i]);
while(!((a[0]<a[1])&&(a[1]<a[2])&&(a[2]<a[3])&&(a[3]<a[4])))
{
for(i=0;i<4;i++)
{
if (a[i]>a[i+1])
{
n=i;
break;
}
}
for(i=4;i>n;i--)
{
if(a[i]<a[i-1])
{
temp=a[i-1];
a[i-1]=a[i];
a[i]=temp;
}
}
continue;
}  
for(i=0;i<5;i++)
printf("%d",a[i]);
}



如果还有其他更优算法望指教,谢了!

[解决办法]
加个标记就可以了
[解决办法]

C/C++ code
void BubbleSort (int a[], int n){    int exchange,bound;    int temp;    int j=0;    exchange = n-1;    while( exchange  )    {        bound = exchange;        exchange = 0;        for( j = 0 ;j < bound;j++ )        {            if(a[j] > a[j+1] )            {                temp = a[j];                a[j] = a[j+1];                a[j+1] = temp;                exchange = j;            }        }    }}
[解决办法]
void bubble(int *pa,int n)
{
int i,j,temp,flag;
for(i=0;i<n-1;i++)
{
flag=1;
for(j=n-1;j>i;j--)
if(pa[j-1]>pa[j])
{
temp=pa[j-1];
pa[j-1]=pa[j];
pa[j]=temp;
flag=0;
}

if(flag==1)
break;
}
你可以设置一个flag 如果前面的都有序了,就可以早点结束了。
[解决办法]
C/C++ code
#include <stdio.h>#include <string.h>#define TEST_NUM    16void BubbleSort(float *fInOut, int nLen){    int isSorted = 0;    do     {        float temp;        isSorted = 1;        --nLen;        for (int i = 0; i < nLen; i++)        {            if (fInOut[i] > fInOut[i + 1])            {                isSorted = 0;                temp = fInOut[i];                fInOut[i] = fInOut[i + 1];                fInOut[i + 1] = temp;            }        }    } while (!isSorted);}void main(int argc, char *argv[]){    float arr[TEST_NUM] = {1.0, 2.0, 0.5};    //memset(arr, 0, sizeof(arr));    for (int i = 0; i < TEST_NUM; i++)    {        printf("%f\n", arr[i]);    }    BubbleSort(arr, TEST_NUM);    for (i = 0; i < TEST_NUM; i++)    {        printf("i=%d\t%f\n", i, arr[i]);    }}
[解决办法]
C/C++ code
#define SWAP(a,b) ((a^)=(b^)=(a^)=(b^))void bubble(char a[], int len) {    int i = 1,j,tmp;    bool change;    do     {        change = false;        for(j=0; j<len-i; j++)         {            if(a[j] > a[j+1])             {                SWAP(a[j],a[j+1]);                change = true;            }        }        i++;    } while (i<len && change==true);} 

热点排行