冒泡排序
冒泡排序:
以升序排列为例,我们希望得到一个从左至右递增的序列,那么右面元素的关键字一定比左面的大,于是有了一种朴素的思想,每次比较左右两个数,将大的数放在右面,若有n个数,按上述方法比较完i=1:n,则将这n个书中最大的数放在最右边,那么下一次只需要比较i=1:n-1,即可确定第二大的数。所以一共需要n-1轮比较,确定n-1个大数。因为这种排序方法好像冒泡一样把较大的数像泡泡一样一个一个的从底下冒上来,故称作冒泡排序。代码如下:
1 void sort(int *p, int n)//数组p[]和其元素个数n 2 { 3 int temp; 4 for(int i = 1; i<n; i++) //需要n-1轮比较 5 for(int j = 0; j<n-i; j++) //每轮从0到n-i-1中找到最大的数,将其置于右端 6 { 7 if(p[j]>p[j+1]) 8 { 9 temp = p[j]; 10 p[j] = p[j+1]; 11 p[j+1] = temp; 12 } 13 } 14 }
冒泡排序的复杂度:两层嵌套循环的排序,所以时间复杂度为o(n^2),冒泡排序理解简单,但时间复杂度大;