数据结构-冒泡排序

冒泡排序的思想:

      依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

代码:

 

#include<stdio.h>
int main()
{
 int a[100];
 int n,temp,i,j;
 printf("Enter n:");
 scanf("%d",&n);
 printf("Enter %d integer:",n);
 for(i=0;i<n;i++)
 scanf("%d",&a[i]);
 
 for(i=1;i<n;i++){
    for(j=0;j<n-i;j++)
    {
    if(a[j]>a[j+1])
    {
     temp=a[j];
     a[j]=a[j+1];
     a[j+1]=temp;
    }
 }
 }
    printf("After sorted:");
    for(i=0;i<n;i++)
    printf("%4d",a[i]);
    printf("\n");
    
    return 0;
}
/*输出示例:
Enter n:8
Enter 8 integer:1 5 5 82 45 95 15 43
After sorted:  1  5  5 15 43 45 82 95
请按任意键继续. . .

Enter n:10
Enter 10 integer:25 1 52 69 5 96 -77 59 123 -960
After sorted: -960  -77    1    5   25   52   59   69   96  123
请按任意键继续. . .
 
*/

 

2.算法改进(如果某一趟排序数据没有发生交换,说明序列当前已经是排好序了)。

#include<stdio.h>
int main()
{
    int a[10];
    int i,j,tem;
    bool bchange = false;
    printf("Please input 10 numbers:\n");
    for(i = 0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    //Bubble
    for(i=0;i<9;i++)
    {
        for(j=0;j<9-i;j++)
        {
            bchange = false;
            if(a[j]>a[j+1])
            {
                tem = a[j];
                a[j] = a[j+1];
                a[j+1] = tem;
                bchange = true;
            }
        }
        if(!bchange)//not change
        break;
    }
    printf("The sorted numbers:\n");
    for(i = 0;i<10;i++)
    {
        printf("%3d",a[i]);        
    }
        printf("\n");
        return 0;

} 

posted @ 2013-03-24 11:06  蓝色L火焰  阅读(228)  评论(0编辑  收藏  举报