问题描述:
实现对数组的普通快速排序与随机快速排序
实验要求:
(1)实现上述两个算法
(2)统计算法的运行时间
(3)分析性能差异,作出总结

代码:

一:普通快速排序

public class QuickSort1 {
public static void QuickSort(int []A,int l,int r){
int temp;
int i = l;
int j = r;
if(l<r){
temp = A[i];
while(i != j){
while(i<j && A[j] >= temp){
--j;
}
A[i] = A[j];
while(i<j && A[i] <= temp){
++i;
}
A[j] = A[i];
}
A[i] = temp;
QuickSort(A, l, i-);
QuickSort(A, i+, r);
}
}

二:随机快速排序

    public static void exchange(int[] array,int a,int b){
int temp = 0;
temp = array[a];
array[a] = array[b];
array[b] = temp;
}
public static int random_patition(int[] A,int left,int right){
int temp = 0;
int i = left-1;
Random random = new Random();
int k = left + random.nextInt(right - left);
exchange(A,k,right);
temp = A[right];
//找到所有比temp小的数,放在temp左边
for(int j = left ; j<right ; j++){
if(A[j] <= temp){
i++;
exchange(A,i,j);
}
}
//将枢轴放回原位
exchange(A,i+1, right);
return i+1;
}
public static void QuickSort(int[] A,int l,int r){
if(l<r){
int dot = random_patition(A, l, r);
QuickSort(A, l, dot-1);
QuickSort(A, dot+1, r);
}
}

三:比较两个时间差的main函数

    public static void main(String[] args){
int[] A = new int[20000];
int[] A_copy = new int[20000];
//生成两个随机数组
// System.out.println("排序之前的20000个数是:");
// Random random = new Random();
// for(int i = 0; i<A.length;i++){
// A[i] = (int)random.nextInt(100000);
// A_copy[i] = A[i];
// System.out.print(A[i]+" ");
// if(i%10 == 0&&i!=0){
// System.out.print("\n");
// }
// } //生成两个1-20000的有序数组,目的:比较当数组有序时哪个排序速度快
for(int i = 0;i<A.length;i++){
A[i] = i;
A_copy[i] = i;
}
//普通快速排序算法
Date before1 = new Date();
long before1_QuickSort = before1.getTime();
QuickSort(A,0,1999);
Date after1 = new Date();
long after1_QuickSort = after1.getTime();
long time1 = after1_QuickSort - before1_QuickSort; //随机快速排序算法
Date before2 = new Date();
long before2_QuickSort = before2.getTime();
QuickSort2.QuickSort(A_copy, 0, 1999);
Date after2 = new Date();
long after2_QuickSort = after2.getTime();
long time2 = after2_QuickSort - before2_QuickSort;
System.out.println("\n普通快速排序之后的20000个数是:");
for(int k = 0;k<A.length;k++){
System.out.print(A[k]+" ");
if(k%10 == 0&&k!=0){
System.out.print("\n");
}
}
System.out.println("\n普通快速排序算法运行时间:"+time1);
System.out.println("随机快速排序算法运行时间:"+time2);
System.out.println("相差"+(time1-time2));
}

[算法]用JAVA实现快速排序的更多相关文章

  1. 常见排序算法(附java代码)

    常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...

  2. 几大排序算法的Java实现

    很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...

  3. 7种基本排序算法的Java实现

    7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 /** * 直接插 ...

  4. 查找算法(Java实现)

    1.二分查找算法 package other; public class BinarySearch { /* * 循环实现二分查找算法arr 已排好序的数组x 需要查找的数-1 无法查到数据 */ p ...

  5. 几种简单的排序算法(JAVA)

    几种排序算法(JAVA) 一.代码 package com.hdwang; import java.util.Arrays; /** * Created by admin on 2017/1/20. ...

  6. 常见排序算法总结 -- java实现

    常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...

  7. 几大排序算法的Java实现(原创)

    几大排序算法的Java实现 更新中... 注: 该类中附有随机生成[min, max)范围不重复整数的方法,如果各位看官对此方法有什么更好的建议,欢迎提出交流. 各个算法的思路都写在该类的注释中了,同 ...

  8. 深度实战玩转算法, Java语言7个经典应用诠释算法精髓

    深度实战玩转算法,以Java语言主讲,通过7款经典好玩游戏,真正将算法用于实际开发,由算法大牛ACM亚洲区奖牌获得者liuyubobobo主讲,看得见的算法,带领你进入一个不一样的算法世界,本套课程共 ...

  9. 十大经典排序算法(java实现、配图解,附源码)

    前言: 本文章主要是讲解我个人在学习Java开发环境的排序算法时做的一些准备,以及个人的心得体会,汇集成本篇文章,作为自己对排序算法理解的总结与笔记. 内容主要是关于十大经典排序算法的简介.原理.动静 ...

随机推荐

  1. Flask 参数简介

    我们都知道学习了Flask的时候它里面的参数是有很多种的参数  都是需要相互进行调用传递的  今天就简要分析一些常见的参数 首先导入Flask之后看 源码 from flask import Flas ...

  2. UIView使用UIMotionEffect效果

    UIView使用UIMotionEffect效果 这个效果在模拟器上看不了,所以无法截图. UIView+MotionEffect.h  +  UIView+MotionEffect.m // // ...

  3. 模仿SDWebImage实现异步加载图片

    模仿SDWebImage实现异步加载图片 SDWebImage想必大家都不陌生吧,要实现它的图片异步加载功能这个还是很简单的. 注意:此处我只实现了异步加载图片,并没有将文件缓存到本地的打算哦:) 源 ...

  4. [翻译] CRPixellatedView-用CIPixellate滤镜动态渲染UIView

    CRPixellatedView-用CIPixellate滤镜动态渲染UIView https://github.com/chroman/CRPixellatedView 本人测试的效果: Usage ...

  5. 使用UISearchDisplayController

    使用UISearchDisplayController 虽然UISearchDisplayController名字中带有controller,可他不是一个UIView相关的controller,因为, ...

  6. [EffectiveC++]item44:将与参数无关的代码抽离templates

  7. Mac环境下WingIDE切换python版本

    https://www.cnblogs.com/fastLearn/p/6514442.html

  8. 【ORACLE】使用中注意事项(二)

    问题1:ORACLE在插入数据的时候,有时候中文变成????? 原因:由于当前计算机的字符集和服务器上的字符集不一致,导致中文乱码. 解决方案: 在当前使用的计算机中设置环境变量 在我的电脑上右键属性 ...

  9. RabbitMQ学习以及与Spring的集成(三)

    本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收. 在RabbitMQ的Spring配置文件中,首先需要增加命名空间. xmlns:rabbit="http://www. ...

  10. 学习python第三天单行函数

    1.去重:distinct关键字 需求:查看公司一共有多少部门? select department_id from employees;此代码会查出107条记录,存在部门重复的问题! select ...