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

交换排序算法---冒泡排序与快速排序

时间:2014-09-03 01:30:55      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   java   strong   ar   for   

本文介绍两种交换排序方法:冒泡排序、快速排序

冒泡排序

冒泡排序基本思想

每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列重复前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了.因此,复杂度在最坏的情况下是O(N ^2).

冒泡排序实现过程

 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。

 如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。

 (1)初始

     R[1..n]为无序区。

 (2)第一趟扫描

    从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);

    对于每对气泡(R[j+1],R[j]),若R[j+1].key<R[j].key,则交换R[j+1]和R[j]的内容。

       第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。

 (3)第二趟扫描

     扫描R[2..n]。扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上……

     最后,经过n-1 趟扫描可得到有序区R[1..n]

注意:  1.第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区;

       2.扫描仍是从无序区底部向上直至该区顶部;

       3.扫描完毕时,该区中最轻气泡飘浮到顶部位置R[i]上,结果是R[1..i]变为新的有序区。

举例说明"冒泡排序的排序过程"

待排序的记录数组(23,34,5,7,56),设想待排序数组垂直竖立。

bubuko.com,布布扣

待排序数组(6,8,5,7,4)完整的排序过程

bubuko.com,布布扣

更多"冒泡排序测试",到《冒泡排序动画演示

下面是Java实现代码

public class SortSolution {

    static int count = 0;

    /** 
     * 改进后的冒泡排序算法的实现: 
     * @param list 欲排序的数组 
     * @author tony 
     */  
    public static void improvedBubbleSort(int[] list) {  
        boolean needNextPass = true;  
        for(int i = 0; i < list.length && needNextPass; ++i) { 
            needNextPass = false;
            for(int j = list.length-1; j > i; --j) {  
                if(list[j] < list[j-1]) {  
                       int temp = list[j];  
                       list[j] = list[j-1];  
                       list[j-1] = temp;
                       needNextPass = true;
                       count++;
                }  
            } 
            //内层循环判断出有序后,便不再进行循环  
            if (!needNextPass) return;
            System.out.print("" + (i + 1) + "次排序结果:");
            for (int k = 0; k < list.length; k++) {
                System.out.print(list[k] + "\t");
            }
            System.out.println("");
        } 
        System.out.print("最终排序结果:");
        for (int l = 0; l < list.length; l++) {
            System.out.print(list[l] + "\t");
        }
    }  


    public static void main(String[] args) {
        int[] array = new int[6];  
        for (int k = 0; k < array.length; k++) {  
            array[k] = (int) (Math.random() * 100);  
        }
        System.out.print("排序之前结果为:");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + "\t");
        }
        System.out.println("");
        runBubbleSort(array);
        System.out.println("交换次数:"+count);
    }
        
}

 

交换排序算法---冒泡排序与快速排序

标签:style   blog   http   color   io   java   strong   ar   for   

原文地址:http://www.cnblogs.com/ITtangtang/p/3952677.html

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