冒泡数据排序算法

来源:互联网 发布:mmd软件下载 编辑:程序博客网 时间:2024/04/29 05:18
 冒泡数据排序算法
 
01/*   冒泡法是数据排序的一种基本算法,它的基本方法是:相邻两元素进行比较,如有需要则进行交换,
02每完成一次循环就将最小元素排在最后(如从大到小排序),下一次循环是将其他的数进行类似操作?
03如将N 个数按从大到小排序,Turbo C语言程序函数 
04如下: */
05  
06void sort(int a[],intn); 
07main()
08{
09    inta[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(inta[],int n)
19    {
20       inti ,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(inta[],int n)
36{
37    inti ,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(inta[],int n) 
58{
59    inti ,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}