码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构之冒泡排序

时间:2014-07-31 19:55:57      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   数据   for   2014   

1.冒泡法原理

原理很简单每一趟排序将最大的或者最小的数往后移动,知道一趟排序过程中没有数据交换为止。

例如:一个序列有n个数据a1,a2……an,第一趟排序为:首先a1和a2比较,如何逆序则交换位置,然后a2,a3比较,以此类推an-1和an比较。然后进入第二趟排序排序的范围为a1~an-1...第3 ,第4.……直到一趟排序过程中没有发生数据交换则停止。

2.冒泡法代码

main.cpp

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define INIT  10000
 5 #define INCRENMENT 100
 6 
 7 
 8 //顺序列表结构体
 9 typedef struct List{
10     int *elem;//基地址
11     int length;//顺序列表的长度
12     int size;//总长度
13 }List;
14 //列表初始化
15 void init(List &L)
16 {
17     L.elem=(int*)malloc(sizeof(int)*INIT);
18     L.length=0;
19     L.size=INIT;
20     printf("初始化成功\n");
21 }
22 //显示列表数据
23 void print(List L)
24 {
25     for(int i=1;i<=L.length;i++)
26         printf("%d\t",L.elem[i]);
27     printf("\n");
28 
29 }
30 //插入新数据
31 void insert(List &L,int i)
32 {
33     if(L.length>=L.size)
34     {
35         L.elem=(int*)realloc(L.elem,sizeof(int)*(L.size+INCRENMENT));
36         if(!L.elem)
37         {
38             printf("内存分配不足\n");
39             exit(-1);
40 
41         }
42         L.size+=INCRENMENT;
43     }
44     L.elem[++L.length]=i;
45     //printf("%d插入完毕\n",i);
46 
47 }
48 void BubbleSort(List &L,int &compareCount,int &changeCount)
49 {
50     bool change;
51     int c=0;//比较次数
52     int d=0;//交换次数
53     for(int i=L.length,change=true;change && i>0;i--)
54     {
55         change=false;
56         for(int j=1;j<i;j++)
57         {
58             c++;
59             if(L.elem[j]>L.elem[j+1])
60             {
61                 int temp=L.elem[j];
62                 L.elem[j]=L.elem[j+1];
63                 L.elem[j+1]=temp;
64                 change=true;
65                 d++;
66             }
67 
68         }
69         compareCount=c;
70         changeCount=d;
71     }
72 }
73 int main()
74 {
75     List L;
76     init(L);
77     for(int i=1;i<=10;i++){
78         insert(L,i*239%99);
79     }
80     printf("初始化10个随机数据\n");
81     print(L);
82     printf("排序完后数据\n");
83     int c,d;
84     BubbleSort(L,c,d);
85     printf("比较次数=%d,交换次数=%d\n",c,d);
86     print(L);
87     return 0;
88 }

3.运行结果

bubuko.com,布布扣

4.冒泡法效率分析

如果初始序列为“正序”的话,需要比较n-1次;如果初始序列为“逆序”的话,则需要比较n(n-1)/2次,然后交换移动相应的次数,因此冒泡排序的算法的时间复杂度为O(N^2)

最差情况O(n^2),最好情况O(n)

 

数据结构之冒泡排序,布布扣,bubuko.com

数据结构之冒泡排序

标签:style   blog   http   color   io   数据   for   2014   

原文地址:http://www.cnblogs.com/forsta/p/3881164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!