冒泡数据排序算法

 冒泡数据排序算法
 
01/*   冒泡法是数据排序的一种基本算法,它的基本方法是:相邻两元素进行比较,如有需要则进行交换,
02每完成一次循环就将最小元素排在最后(如从大到小排序),下一次循环是将其他的数进行类似操作?
03如将N 个数按从大到小排序,Turbo C语言程序函数 
04如下: */
05  
06void sort(int a[],int n); 
07main()
08{
09    int a[100],i ,j ,n ; 
10   
11    /*输入数组元素的个数及各元素的值*/ 
12    scanf("%d",&n); 
13    for(i =0;i <n ;i ++ )scanf("%d",&a [i]);
14    sort(a,n); 
15    for(i =0;i <n ;i ++ )printf("%d",a[i]); 
16      
17}
18  sort(int a[],int n)
19    {
20       int i ,j ,t ; 
21       for(i =n -2;i >=0; i--) 
22           for(j =0;j <i ; j++)
23               if(a[j]<a[j +1]) 
24               {
25                   t =a[j];
26                   a[j]=a[j +1];
27                   a[j +1]=t ;
28               }
29    } 
30      
31/*N 个元素需比较N *(N -1)/2次,效率较差?其实,可根据每一次循环比较中的情 
32况改进之?   [改进一]:若某次循环中没有数据交换过,则可认为数据已经有序了,
33不必再进行循环了,可在程序中设一变量Flag 用来标识有无数据交换? */
34  
35sort(int a[],int n)
36{
37    int i ,j ,t ,flag ; 
38    for (i =n -2;i >0; i--) 
39    {
40        flag =0; 
41        for(j =0;j <i ; j++)
42            if(a[j]<a[j +1])
43            {
44                t =a[j];
45                a[j]=a[j +1];
46                a[j +1]=t ;
47                flag =1;
48            } 
49        if (flag ==0)break; 
50    }
51}
52  
53/*[改进二]:如果在一次循环中,最后的某些元素没有交换过,则说明后面这些元 
54素的顺序已排序,下次循环可不对其进行比较?本方法主要考虑要排序的数组元素的范 
55围,而不是每一轮排序都将数组元素的范围减少1?*/
56  
57sort(int a[],int n) 
58{
59    int i ,j ,t ,k,flag ;
60    flag =n -1; 
61    while (flag >0) 
62    {
63        k=0; 
64        for(j =0;j <i ;j ++)
65        if(a[j]<a[j +1])
66        {
67            t =a[j];
68            a[j]=a[j +1]; 
69            a[j +1]=t ;
70            k=j ;
71        } 
72        flag =k; /*此处不填flag = flag -1;*/
73    }
74}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值