您的位置:首页 > 理论基础 > 数据结构算法

【数据结构和算法那些事】--【1】--冒泡排序

2014-02-20 18:19 176 查看
个人学习整理,如有不足之处,请不吝指教。转载请注明:@CSU-Max

首先我们来看一下冒泡排序。冒泡排序是一种很慢的排序方法,但是也是最简单的一中排序方法,所以我们一般都以冒泡排序来开始我们的排序方法之旅。
 
原理描述:
(以按从小到大的顺序为例)先将n个元素中的第一个K1与第二个K2进行比较,如果K1>K2,则交换两个元素的位置,进而比较第二个和第三个元素的关键字,如此类推,直到比较完第n-1 个元素和第n个元素为止,这样,第一趟就完成了,这个有n个元素的序列中关键字最大的元素就会通过交换操作被放到了第n个位置上。同理进行第二趟,第二趟是对序列中的前n-1 个元素进行操作,将这个有n-1个元素的序列中关键字最大的元素通过交换操作放到第n-1个位置上。如此迭代多次,就会得出最终排好序的序列。一般来说,第i
趟排序是对元素序列的前n-i+1 个元素进行排序,使得前n-i+1 个元素中关键字最大的元素被放置到第n-i+1 个位置上。通过n-1 趟排序,就可以完成排序,使得序列有序。
 
图解说明:
 
待排序序列       14     45    56    10    11    24    45    23
第1趟                14    45    10    11    24    45    23    56

第2趟                14    10    11    24    45    23    45    56
第3趟                10    11    14    24    23    45    45    56
第4趟                10    11    14    23    24    45    45    56 
第5趟                10    11    14    23    24    45    45    56 
第6趟                10    11    14    23    24    45    45    56 
第7趟                10    11    14    23    24    45    45    56

 
第1趟过程详解:
(1)    14    45    56    10    11    24    45    23        不交换

(2)    14    45    56    10    11    24    45    23        不交换

(3)    14    45    56    10    11    24    45    23        交换
(4)    14    45    10    56    11    24    45    23        交换

(5)    14    45    10    11    56    24    45    23        交换

(6)    14    45    10    11    24    56    45    23        交换

(7)    14    45    10    11    24    45    56    23        交换
(8)    14    45    10    11    24    45    23    56        第1趟完成
 
实现代码:

/**
*  @Description :冒泡排序
*  @param  k        带排序的数组
*  @param  start    数组中待排序区间的起点
*  @param  end    数组中待排序区间的终点
*/
public   void  bubbleSort( int [] k,  int  start,  int  end){
int  n = end - start + 1;
for ( int  i = 1; i < n; i++){
for ( int   j  = start;  j  <= end -i;  j ++){
if (k[ j ] > k[ j +1]){
int  temp = k[ j ];
k[ j ] = k[ j +1];
k[ j +1] = temp;
}
}
}
}


//测试代码
public   static   void  main(String[] args) {
MySortMethod method =  new  MySortMethod();
MyUtil myUtil =  new  MyUtil();
int [] r = {14, 45, 56, 10, 11, 24, 45, 23};

myUtil.printArray(r);
method.bubbleSort(r, 0, r. length -1);
myUtil.printArray(r);
}


MyUtil类的printArray方法就是一个打印数组元素的方法,在这里就不贴出来了。
 
相关分析:
空间效率: 仅使用一个辅存单元。
时间效率:O(n2)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: