算法研究之快速排序java版
很早之前就已经接触过快速排序算法了,面试当中也屡屡被问到,虽然明白其原理,但从未真正的用代码敲出来。
写关于算法的代码之前一定要原理想明白,不然就是盲目,在参考有关资料及自己的沉思之后,写出如下代码,中间出现了一些bug,但都很快解决了
如果有更好的优化算法,还请不吝赐教!!!!
源代码:
package com.zken.test; /**
* @author iamzken
* 排序算法
* 使用快速排序算法对一个数组从小到大排序
* 2015-8-27 13:40
*/
public class Sorter {
//获取中间索引,该索引对应的关键字把数组分为左右两部分,其中,左边的都比该索引对应的关键字小,右边的都比该索引对应的关键字大
public static int getMiddle(int[] a , int left , int right){
//随机取一个关键字,这里取left索引对应的关键字,相当于left索引对应的位置被挖了一个”坑“,需要下面的程序填补这个”坑“
int key = a[left];
//临界条件
while(left < right){
//当right > left && a[right] > key说明当前right索引所对应的关键字比key大,不需要交换
while(right > left && a[right] > key){
right--;
}
//程序能执行到这里说明当前right索引所对应的关键字比key小,需要交换,即补”坑“
a[left] = a[right];
//当left < right && a[left] < key说明当前left索引所对应的关键字比key小,不需要交换
while(left < right && a[left] < key){
left++;
}
//程序能执行到这里说明当前left索引所对应的关键字比key大,需要交换,即补”坑“
a[right] = a[left];
}
//程序跳出了while循环,说明left已经等于right,下面两句也可以改为a[right]=key;return right;
a[left] = key;
return left;
} public static void quickSort(int[] a , int left , int right){
//临界条件
if(left < right){
//获取中间索引
int middle = getMiddle(a, left, right);
//对左边子数组递归排序
quickSort(a,left,middle-1);
//对右边子数组递归排序
quickSort(a, middle+1, right);
} }
//测试程序
public static void main(String[] args) { int[] a = new int[]{9,3,7,8,2,0,6};
System.out.println("快速排序前的数组:");
int i = 0;
while(i < a.length){
System.out.print(a[i]+"\t");
i++;
}
System.out.println();
Sorter.quickSort(a, 0, a.length-1);
System.out.println("快速排序后的数组:");
i = 0;
while(i < a.length){
System.out.print(a[i]+"\t");
i++;
} }
}
执行结果:
快速排序前的数组:
9 3 7
8 2
0 6
快速排序后的数组:
0 2 3
6 7
8 9
算法研究之快速排序java版的更多相关文章
- 【算法】快速排序-Java版
说在前面的话 平常码砖的时候,对于一个数组进行排序更多的是起泡排序,起泡排序对于一般不是很长的数组进行操作没什么问题,一旦数组过大,很明显效率低. 而快排是对起泡排序的一种改进,效率明显优高. 快排思 ...
- RAS算法简单示例(Java版)
RSA算法——由三位发明者Ronald Rivest.Adi Shamir 和 Leonard Adleman 姓氏的首字母拼在一起组成. RSA算法属于“公开密钥加密技术”,其加密和解密的秘钥不同. ...
- 基于雪花算法生成分布式ID(Java版)
SnowFlake算法原理介绍 在分布式系统中会将一个业务的系统部署到多台服务器上,用户随机访问其中一台,而之所以引入分布式系统就是为了让整个系统能够承载更大的访问量.诸如订单号这些我们需要它是全局唯 ...
- 算法练习1---桶排序java版
今天复习了桶排序. 例如现在有满分为10分的试卷,学生得分分别为2,8,5,3,5,7,现在要给这些分数按照从大到小输出,使用桶排序的思想:有11个桶,每个桶有一个编号,编号从0-10,每出现一个分数 ...
- 快速排序Java版
package Quick; public class quicksort { static class QuickSort { public int data[]; private int part ...
- 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)
短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ...
- 快速排序算法Java版
网上关于快速排序的算法原理和算法实现都比较多,不过java是实现并不多,而且部分实现很难理解,和思路有点不搭调.所以整理了这篇文章.如果有不妥之处还请建议.首先先复习一些基础. 1.算法概念. ...
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- 常见排序算法总结(java版)
一.冒泡排序 1.原理:相邻元素两两比较,大的往后放.第一次完毕,最大值在最大索引处. 即使用相邻的两个元素一次比价,依次将最大的数放到最后. 2.代码: public static void bub ...
- 【Java】 大话数据结构(15) 排序算法(2) (快速排序及其优化)
本文根据<大话数据结构>一书,实现了Java版的快速排序. 更多:数据结构与算法合集 基本概念 基本思想:在每轮排序中,选取一个基准元素,其他元素中比基准元素小的排到数列的一边,大的排到数 ...
随机推荐
- 山泽Typec扩展坞M.2移动固态硬盘盒拓展 - 我的硬件配置
- 最新版Emlog采集发布插件-免费下载
推荐一款可以自动采集网页文章数据,并发布到Emlog网站的Emlog采集发布插件(兼容最新的Emlog Pro版本,也兼容之前的 Emlog 5.3 和 Emlog 6.0 版本),支持对接简数采集器 ...
- P10033 题解
不喜欢特判?不喜欢分讨?不喜欢被卡 corner?不喜欢证明?不喜欢动脑子? 那就看这篇题解! 感性思路 首先感性地感受一下题目宽泛的限制条件题解区各种花式的构造方法就不难想出,符合条件的序列实在很多 ...
- flutter3+dart3聊天室|Flutter3跨平台仿微信App语音聊天/朋友圈
全新研发flutter3+dart3+photo_view跨多端仿微信App界面聊天Flutter3-Chat. flutter3-chat基于最新跨全平台技术flutter3+dart3+mater ...
- Power BI 11 DAY
目录 电商平台流量分析 流量相关指标 流量数量指标 流量质量指标 度量值计算公式 流量转化率重要指标 指标观测维度 电商平台流量分析 电商平台黄金公式:销售额 = 流量 + 转化率 + 客单价 流量相 ...
- 基于keras的卷积神经网络(CNN)
1 前言 本文以MNIST手写数字分类为例,讲解使用一维卷积和二维卷积实现 CNN 模型.关于 MNIST 数据集的说明,见使用TensorFlow实现MNIST数据集分类.实验中主要用到 Conv1 ...
- Java设计模式-备忘录模式Memento
介绍 备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 可以这里理解备忘录模式:现实生 ...
- SpringCloud Bus动态刷新中心化配置
说明 上一篇我们介绍了配置中心实战,并留下了一个配置修改后如何实现自动刷新的问题,下面就实际操作一下,首先是手动刷新单个微服务,其次是利用消息总线实现全部刷新. 手动动态刷新 动态刷新是当远程配置文件 ...
- 配置nginx反向代理
最近在做一个前后分离的项目,前端用Vue,后台spring boot,使用nginx做反向代理.下面说一下如何配置: 启动spring boot项目,端口8110 启动nginx 修改nginx.co ...
- vue+jsPlumb制成的流程图项目
本项目参考:https://github.com/wangduanduan/visual-ivr 主页面如下: