java排序算法个人总结

快速排序

    static void _quick_sort(int array[], int start, int end){  
        int middle;  
        if(start >= end)  
            return;  

        middle = get_middle(array, start, end);  
        _quick_sort(array, start, middle -1);  
        _quick_sort(array, middle + 1, end);  
    }  

    private static int get_middle(int[] array, int start, int end) {
        int tmp = array[start];    //数组的第一个作为中轴  
        while (start < end) {  
            while (start < end && array[end] > tmp) {  
                end--;  
            }  
            array[start] = array[end];   //比中轴小的记录移到低端  
            while (start < end && array[start] <= tmp) {  
                start++;  
            }  
            array[end] = array[start];   //比中轴大的记录移到高端  
        }  
        array[start] = tmp;              //中轴记录到尾  
        output(array,"step"+ ++index +":");        
        return start;                   //返回中轴的位置  
    }

    static void quick_sort(int array[], int length){  
        index = 0;
        if(null == array || 0 == length)  
            return;  
        _quick_sort(array, 0, length-1);  
        output(array,"");        
    }

改进冒泡

    private static void bubble_sort(int[] array) {
        index = 0;
        int i_last_swap = -1;  
        int i_last_swap_tmp = 0;  
        for (int i = 0; i < array.length 
                && (i_last_swap_tmp != i_last_swap) //排除已有序的区间
                && (i_last_swap_tmp != array.length-1);//上次排序仅交换了最后两位
                ++i){  
            i_last_swap = i_last_swap_tmp;
            System.out.println("["+i_last_swap+","+ (int)(array.length-1) +"]:");
            for (int j = array.length - 1; j > i_last_swap; --j)  //从后往前冒泡
            {  
                if (array[j] < array[j - 1])  
                {  
                    int i_tmp = array[j];  
                    array[j] = array[j - 1];  
                    array[j - 1] = i_tmp;  

                    i_last_swap_tmp = j;  
                    output(array, "last_swap_loctaion:"+j+"\nsetp"+ ++index +":");
                }  
            }
            if (i_last_swap_tmp == i_last_swap)  
            {  
                System.out.println("已有序!");
            }  
        }  
        return;  
    }
    //双向扫描冒泡,效率最高的冒泡,在上一个改进的基础上每次反向冒泡一次
    public static void ImproveBubble3(int [] array){
        int low, up, _index, i;
        low = 0;
        up = array.length - 1;
        _index = low;

        while( up > low)
        { 
            System.out.println("["+ low +","+ up +"]:");
            for( i = low; i < up; i++)        //从上向下扫描
            {
                if(array[i] > array[i + 1])
                {
                    int i_tmp = array[i];  
                    array[i] = array[i + 1];  
                    array[i + 1] = i_tmp;  
                    _index = i; 
                    output(array, "last_swap_loctaion:"+ i +"\nsetp"+ ++index +":");
                }
            }

            up = _index;                     //记录最后一个交换的位置
            for(i = up; i > low; i--)             //从最后一个交换位置处从下向上扫描
            {
                if(array[i] < array[i-1])
                {
                    int i_tmp = array[i];  
                    array[i] = array[i - 1];  
                    array[i - 1] = i_tmp;  
                    _index = i;
                    output(array, "last_swap_loctaion:"+ i +"\nsetp"+ ++index +":");
                }
            }
            low = _index;                    //记录最后一个交换的位置
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值