Java实现排序算法效率比较

本文介绍了实训项目,比较选择、冒泡、快速排序三种算法在处理10000个10000以内实数时的效率。通过类设计、实现、测试和分析,得出快速排序具有最高效率的结论。
摘要由CSDN通过智能技术生成

实训题 4:排序算法效率比较

一 项目说明

实训目的:数组、Java API 的应用
实训要求:随机生成 10000 个 10000 以内的实数,分别用选择、冒泡、快速排序等算法进行排序,计算各种排序所需时间并比较算法的效率。

二 类设计

在这里插入图片描述
快速排序kuaiSuSort(int a[], int low, int high)
快速排序的基本思想就是从一个数组中任意挑选一个元素(通常来说会选择最左边的元素)作为中轴元素,将剩下的元素以中轴元素作为比较的标准,将小于等于中轴元素的放到中轴元素的左边,将大于中轴元素的放到中轴元素的右边。然后以当前中轴元素的位置为界,将左半部分子数组和右半部分子数组看成两个新的数组,重复上述操作,直到子数组的元素个数小于等于1(因为一个元素的数组必定是有序的)
排序算法效率比较Compare(long a,long b,long c)
将每个排序运行的时间进行比较,输出时间最少的那个排序算法。

三 项目实现设计

主方法中用for循环随机数的生成先生成 10000 个 10000 以内的实数,然后在各个排序前后定义一个System类的currentTimeMillis()方法,用于统计当前时间,再进行排序运算:
冒泡排序
第一步,从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一轮比较。
第二步,除了最后一个元素,将剩余的元素继续进行比较,过程与第一步相似,这样就可以将数组中的第二大的数放在倒数第二个位置。
第三步,依次类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止。然后输出运行时间。
选择排序
第一步,每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置
第二步,再从剩余未排序元素中继续寻找最小(大)元素,然后放到刚才已排序序列的后面。
第三步,以此类推,直到全部待排序的数据元素排完。然后输出运行时间。

四 运行与测试

在这里插入图片描述

五 分析与总结

首先我第一反应就是,要比较他们之间的效率,那么就要用到数学中的控制变量法来做了,那么我就要控制他们要比较的数字相同,所以我定义了三个数组,用来保存随机生成的10000个实数,然后只要他们的算法不一样就好了。冒泡排序我以前也写过,具体分析我已经写在项目实现设计中了。其他的排序方法的分析也在上面,讲讲我遇到的困难吧,再写冒泡排序和选择排序的时候,一切的进行的十分顺利,在写快速排序的时候我还以为和二分查找算法一样呢,没想到不是,只好去查了下资料,比二分查找算法复杂多了,通过这个实训,我学到了快速算法,发现快速算法是这几个算法中效率最高的。

package experiment.four;
import java.util.Random;
public class SortCompare {
   
	public static void main(String[] args) {
   
	    long efficiency1,efficiency2,efficiency3;
		int key[] = new int[10000];
		int temp;//定义一个中间变量,用来交换数字
		Random random = new Random();
		//产生1000个随机数
		for (int i = 0; i < 10000; i++) {
   
			key[i] = random.nextInt(10000);
		}
		// 创建一个临时数组,把生成的随机数组存储起来
		int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值