算法研究之快速排序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版的快速排序. 更多:数据结构与算法合集 基本概念 基本思想:在每轮排序中,选取一个基准元素,其他元素中比基准元素小的排到数列的一边,大的排到数 ...
随机推荐
- 【C语言深度解剖】一篇解决程序的环境【编译+链接详解】让面试官给我们竖起大拇指
文章目录 程序的翻译环境 翻译环境详解 编译 预编译 编译 汇编 关于形成符号表 链接 运行环境 尾声 [C语言深度解剖][Linux操作系统]程序的环境[编译+链接详解] 那么这里博主先安利一下一些 ...
- AOF
AOF 基础概念 以日志的形式记录了每个写操作 在redis重新运行时,会将这些操作重新执行一遍 文件形式:appendonly.aof 开启AOF需要更改配置文件:appendonly:yes AO ...
- 零基础入门Vue之画龙点睛——再探监测数据
追忆 上一节:零基础入门Vue之影分身之术--列表渲染&渲染原理浅析 虽然我深知,大佬告诉我"先学应用层在了解底层,以应用层去理解底层",但Vue的数据如何检测的我不得不去 ...
- .NET Core开发实战(第7课:用Autofac增强容器能力)--学习笔记(下)
07 | 用Autofac增强容器能力:引入面向切面编程(AOP)的能力 如何获取没有命名的服务呢? // Autofac 容器获取实例的方式是一组 Resolve 方法 var service = ...
- 选课 洛谷P2014
传送门 \(\Large \textbf{问题描述}\) 大学里实行学分.每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分.学生最后的学分是他选修的各门课的学分的总和. 每个学 ...
- NC20909 游戏
题目链接 题目 题目描述 有 n 个人围成一个环玩传球游戏,每轮游戏手里拿着球的那个人必须将球传给他(她)的一个朋友.游戏一共进行了 m 轮,初始球在第 a 个人手中,问游戏结束后球在第 b 个人手中 ...
- NC16619 [NOIP2008]传球游戏
题目链接 题目 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时 ...
- Ubuntu 22.04 Samba 安装和配置
安装 安装 sudo apt install samba 检查服务状态 systemctl status smbd --no-pager -l 检查是否启用(开机自启动) systemctl is-e ...
- IPNS和DNSLink的使用说明
IPNS和DNSLink的使用说明 IPNS说明 IPNS全称InterPlanetary Name System,就是IPFS下的一个名称解析系统,类似于互联网的DNS,但是与DNS不同的是,IPN ...
- 【OpenGL ES】第一个案例
1 前言 OpenGL(Open Graphics Library)是由 SGI 公司开发的一套 3D 图形软件接口标准,由于具有体系结构简单合理.使用方便.与操作平台无关等优点,OpenGL 迅 ...