java冒泡排序与快速排序

标签: java 排序 冒泡排序 快速排序
1人阅读 评论(0) 收藏 举报
分类:

1.冒泡排序

public class BubbleSort {
    public int sort1(int[] array){
        //计数器,计算比较了多少次
        int count = 0;
        int k,flag = array.length,temp;
        //当运行完一次之后,如果flag没变,则排序完成
        while(flag > 0){
            //k为右边界
            k = flag;
            //flag 为左边界
            flag = 0;
            for(int i = 1; i < k; i++){
                count++;
                if(array[i] < array[i - 1]){
                    temp = array[i];
                    array[i] = array[i - 1];
                    array[i - 1] = temp;
                    flag = i;
                }
            }
        }
        return count;
    }
    public int sort2(int[] array){
        int count = 0,temp;
        for(int i = 0; i < array.length; i ++){
            for(int j = i + 1; j < array.length; j ++){
                count ++;
                if(array[i] > array[j]){
                    temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        BubbleSort bs = new BubbleSort();
        int[] array = new int[]{1,4,2,3,5};
        System.out.println(bs.sort1(array));
        printArray(array);
        array = new int[]{1,4,2,3,5};
        System.out.println(bs.sort2(array));
        printArray(array);
    }
    public static void  printArray(int[] array){
        for(int item : array){
            System.out.print(item + " ");
        }
        System.out.println();
    }
}
2.快速排序

思路:基于分治的思想,是冒泡排序的改进型。
1.分别从数组的两端扫描数组,设两个指示标志(lo指向起始位置,hi指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换lo和hi位置的值,
2.然后从前半部分开始扫秒,发现有元素大于基准点的值,就交换lo和hi位置的值,
3.如此往复循环,直到lo>=hi,然后把基准点的值放到hi这个位置。一次排序就完成了。
4.以后采用递归的方式分别对前半部分和后半部分排序,当前半部分和后半部分均有序时该数组就自然有序了。


public class QuicklySort {
    private int count = 0;
    public int position(int[] array, int low, int hight){
        while(low < hight){
            while(array[hight] >= array[low] && low < hight){
                count ++;
                hight --;
            }
            int key = array[low];
            array[low] = array[hight];
            array[hight] = key;

            while (array[low] <= array[hight] && low < hight){
                count ++;
                low ++;
            }
            key = array[hight];
            array[hight] = array[low];
            array[low] = key;
        }
        return low;
    }
    public void sort(int[] array, int low, int high){
        if(low >= high){
            return;
        }
        int index = position(array,low,high);
        sort(array,low,index - 1);
        sort(array,index + 1, high);
    }

    public static void main(String[] args) {
        int[] array = new int[]{1,5,4,6,2,3,8,7,8,9};
        QuicklySort qs = new QuicklySort();
        qs.sort(array,0,array.length - 1);
        System.out.println(qs.count);
        BubbleSort.printArray(array);

        BubbleSort bs = new BubbleSort();
        array = new int[]{1,5,4,6,2,3,8,7,8,9};
        System.out.println(bs.sort2(array));
        BubbleSort.printArray(array);
    }
}
3.问题测试

1. 对于快速排序时,如果index = 0,或者 index = length - 1;会不会报数组越界异常呢?
  经测试不会,
当index = 0,在sort方法的判断low >= high为true,直接返回了
index = length - 1时亦然。
查看评论

数据结构JAVA版2017教学视频课程

本课程共28个教学视频课程,22小时的教学时间,深入浅出的理论讲解,用JAVA语言实现每个知识点的代码,大量的上机练习题讲解,通过家家乐停车场,佳佳乐彩票机,佳佳乐通讯录,编译原理的语法分析等项目的综合应用实训,上课PPT,上课源代码等资料可以直接下载使用
  • 2017年03月31日 13:31

JAVA中常见的四种排序--冒泡排序、选择排序、插入排序和快速排序 详解

1、排序的介绍 排序是将一群数据,按照指定的顺序进行排列的过程。 2、排序的分类 内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序、选择排序和插入排序) 外部排序:数据量...
  • zyj0813
  • zyj0813
  • 2017-10-20 16:20:24
  • 275

java冒泡排序和快速排序的分析

说来惭愧,昨天面试的时候遇到快速排序的笔试题没答上来。搞java的长期接触的是业务方面的东西,特别是web方向的java,久而久之在学校里面学的最基本的一些东西给忘记了。网上搜索了这两种算法,基本都是...
  • weinianjie1
  • weinianjie1
  • 2015-05-19 22:31:45
  • 1232

java排序算法-比较快速排序,冒泡排序,双向冒泡排序的执行效率

快速排序 原理是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排...
  • twj13162380953
  • twj13162380953
  • 2016-12-28 17:46:38
  • 893

Java---快速排序与冒泡排序的比较

快速排序与冒泡排序的比较经测试,快速排序循环次数明显比冒泡排序的少了很多 废话不多说,直接上代码public class BubbleCompareQuick {int array[] = { 49...
  • wusirandroid
  • wusirandroid
  • 2016-11-19 11:58:14
  • 164

java实现各种排序算法(包括冒泡排序,选择排序,插入排序,快速排序(简洁版))及性能测试

1、冒泡排序是排序里面最简单的了,但性能也最差,数量小的时候还可以,数量一多,是非常慢的。      它的时间复杂度是O(n*n),空间复杂度是O(1)      代码如下,很好理解。 ...
  • qq_21439971
  • qq_21439971
  • 2016-12-27 14:36:43
  • 8434

java实现快速排序、插入排序、选择排序、冒泡排序算法

java实现快速排序、插入排序、选择排序、冒泡排序算法
  • SIMPLE1995
  • SIMPLE1995
  • 2016-05-02 21:43:59
  • 285

六大经典排序算法 java 选择排序、插入排序、冒泡排序、快速排序、堆排序、归并排序,六大经典排序算法,

1. [文件] ChaRuFa.java ~ 890B     下载(71)      ? 1 2 3 4 5 6 7 8...
  • Smurfs___zmy
  • Smurfs___zmy
  • 2016-11-04 08:54:36
  • 630

冒泡排序、快速排序、堆排序(Java)

转载:http://blog.csdn.net/pzhtpf/article/details/7560294一、冒泡排序 基本思想: 在要排序的一组数中,对当前还未排好序的范围内的全部数,自...
  • hbtj_1216
  • hbtj_1216
  • 2017-08-12 23:01:57
  • 311

Java实现四种排序:桶排序,冒泡排序,选择排序,快速排序

下面代码主要是排序算法的java实现,针对不同的算法,程序分别对于实现。1. 桶排序很简单,时间复杂度是O(M+N),但是得占用的空间很大。比如1,4,2,9999,那么就需要开辟出10000个大小的...
  • ganggang112800
  • ganggang112800
  • 2015-11-03 11:47:04
  • 556
    个人资料
    等级:
    访问量: 754
    积分: 67
    排名: 161万+
    文章存档