java冒泡排序 快速排序_java快速排序算法与冒泡排序算法比较

这篇博客探讨了两种常见的排序算法——快速排序和冒泡排序。通过代码实现和运行时间测试,展示了在处理100000个数字的数组时,快速排序相对于冒泡排序的显著优势。快速排序的平均时间复杂度为O(n log n),而冒泡排序的时间复杂度为O(n^2),这使得快速排序在大数据量排序中更为高效。
摘要由CSDN通过智能技术生成

冒泡排序,相信接触过计算机编程的同学都熟悉,由于冒泡排序简洁的特点,它通常被用来对于计算机程序设计入门的学生介绍算法的概念。现在我们来看看另外一种快速排序的方法,

首先看下,冒泡排序算法与快速排序算法的效率:

如下的是main方法

 代码如下复制代码
/**

*

* @Description:

* @author:cuiyaonan2000@163.com

* @date 2014年11月5日 下午1:02:10

*/

public static void main(String[] args) {

//快速排序算法测试

int[] qArray = new int[100000];

for (int i = 0; i < 100000; i ){

qArray[i] = (int) (Math.random() * 100000);

}

long beforeQ = System.currentTimeMillis();

quickSort(qArray, 0, qArray.length-1);

System.out.println("快速排序运行时间:" (System.currentTimeMillis() - beforeQ));

//冒泡排序算法测试

int[] bArray = new int[100000];

for (int i = 0; i < 100000; i ){

bArray[i] = (int) (Math.random() * 100000);

}

long beforeB = System.currentTimeMillis();

bubble(bArray);

System.out.println("冒泡排序运行时间:" (System.currentTimeMillis() - beforeB));

}

在一个有100000 个数字的数组中排序结果如下:

ae0c8f7943e567802beffc7384d5f2e7.png

如下的是大家耳熟能详的冒泡算法:

 代码如下复制代码
/**

*

* @Description:

* @author:cuiyaonan2000@163.com

* @date 2014年11月5日 下午1:00:32

*/

public static void bubble(int[] data) {

for (int i = 0; i < data.length - 1; i ) {

for (int j = i 1; j < data.length; j )

if (data[i] > data[j]) {

int temp = data[j];

data[j] = data[i];

data[i] = temp;

}

}

}

先说下关于快速排序算法的思路:

选取数组第一个数字,作为key.并设置变量i为0,j为数组长度.

从数组最后一位开始向前找,找什么呢?找比key小的数字(不能等于),并记录下坐标j.限制条件是,在向前找的过程中如果一直没找到比key小的数值,就在i

从数组第一位开始向后找,找什么呢?找比key大的数字(不能等于),并记录下坐标i.限制条件是,在向前找的过程中如果一直没找到比key大的数值,就在i

完成如上的操作,打印输出数组发现:数据变得相对有序了,就是在数组中key值坐标前面的都是小于key的,key值坐标后面的都是大于key值得,

所以大家明白了:将以key值为坐标的数组拆分成2个数组,分别去执行123步骤操作,最终就会产生一个有序数组

算法如下

 代码如下复制代码
/**

*

* @Description:

* @author:cuiyaonan2000@163.com

* @date 2014年11月5日 下午1:02:45

*/

public static void quickSort(int[] array,int begin,int end){

int theKey = array[begin];   //设置关键值

int i = begin;

int j = end;

while(true){

while(i= theKey)   //从后面找到一个比关键之小的数字坐标

j-- ;

if(i

int temp = array[j];

array[j] = array[i];

array[i] = temp;

}else{

break;

}

while(i

i ;

if(i

int temp = array[j];

array[j] = array[i];

array[i] = temp;

}else{

break;

}

}

if(--i > begin ){//这个表示一直找到 被拆分的数组中只有一个值.否则递归调用

quickSort(array,begin,i);

}

if( j< end){ //这个表示一直找到 被拆分的数组中只有一个值.否则递归调用

quickSort(array,j,end);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值