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

个人学习整理,如有不足之处,请不吝指教。转载请注明:@CSU-Max

首先我们来看一下冒泡排序。冒泡排序是一种很慢的排序方法,但是也是最简单的一中排序方法,所以我们一般都以冒泡排序来开始我们的排序方法之旅。
 
原理描述:
(以按从小到大的顺序为例)先将n个元素中的第一个K 1与第二个K 2进行比较,如果K 1>K 2,则交换两个元素的位置,进而比较第二个和第三个元素的关键字,如此类推,直到比较完第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(n 2)。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值