[算法]用JAVA实现快速排序
问题描述:
实现对数组的普通快速排序与随机快速排序
实验要求:
(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实现快速排序的更多相关文章
- 常见排序算法(附java代码)
常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...
- 几大排序算法的Java实现
很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...
- 7种基本排序算法的Java实现
7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 /** * 直接插 ...
- 查找算法(Java实现)
1.二分查找算法 package other; public class BinarySearch { /* * 循环实现二分查找算法arr 已排好序的数组x 需要查找的数-1 无法查到数据 */ p ...
- 几种简单的排序算法(JAVA)
几种排序算法(JAVA) 一.代码 package com.hdwang; import java.util.Arrays; /** * Created by admin on 2017/1/20. ...
- 常见排序算法总结 -- java实现
常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...
- 几大排序算法的Java实现(原创)
几大排序算法的Java实现 更新中... 注: 该类中附有随机生成[min, max)范围不重复整数的方法,如果各位看官对此方法有什么更好的建议,欢迎提出交流. 各个算法的思路都写在该类的注释中了,同 ...
- 深度实战玩转算法, Java语言7个经典应用诠释算法精髓
深度实战玩转算法,以Java语言主讲,通过7款经典好玩游戏,真正将算法用于实际开发,由算法大牛ACM亚洲区奖牌获得者liuyubobobo主讲,看得见的算法,带领你进入一个不一样的算法世界,本套课程共 ...
- 十大经典排序算法(java实现、配图解,附源码)
前言: 本文章主要是讲解我个人在学习Java开发环境的排序算法时做的一些准备,以及个人的心得体会,汇集成本篇文章,作为自己对排序算法理解的总结与笔记. 内容主要是关于十大经典排序算法的简介.原理.动静 ...
随机推荐
- Jquery的跨域调用
JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念.当然,究其本质还是通过script标签动态加载js,似乎这是实现真正跨域的唯一方法. getJSON ...
- 工作总结 [all]
2. 工作总结 3. 面试经验 4. 其他
- 剑指offer 07斐波那契数列
现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 java版本: public class Solution { public static void m ...
- UI(三)
1. 2.经常用到的loadmap函数 void CTopology::LoadMap() { //m_map.RemoveAllLayers(); AddLayersBasemap(); AddLa ...
- windows下python 正确安装词云包wordcloud的方法
安装wordcloud的时候果然还是出现了问题,试了网上说的好多办法,最后找到了一种成功率高的,可以优先尝试一下 下载.whl文件http://www.lfd.uci.edu/~gohlke/pyth ...
- 跟我一起阅读Java源代码之HashMap(一)
最近闲的很,想和大家一起学习并讨论下Java的一些源代码以及其实现的数据结构, 不是什么高水平的东西,有兴趣的随便看看 1. 为什么要用Map,以HashMap为例 很多时候我们有这样的需求,我们需要 ...
- css画图那些事
上一篇css3写了一些基本的图形,想到是不是能用css3画个动物,便在网上找图片.于是选中一只大鹏鸟 也不难,一步步的写出身体部位,再定位上去就好了.来一张效果图,后面给两个加了动画,稍微难看一点,后 ...
- Linux 上安装MyEclipse
操作系统ubuntu14.04,亲测安装MyEclipse2014成功,且破解成阿功.在安装myeclipse之前,您当然需要安装jdk了,jdk在这里不做介绍 下载 下载linux版本的MyEcli ...
- JAVA反射机制教程-获取类对象
1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...
- thusc2018真退役记
$day1$: 看了三道题,感觉这次特别毒瘤啊.. $t1$想了一会儿,发现是个傻逼题,然后切掉了. $t2$想了很久,不会,先去搞题答. 题答搞了很久,只搞出第一个点,后面的点根本没看出是什么意思. ...