排序算法之高速排序(Java)
//高速排序
public class Quick_Sort { // 排序的主要算法
private int Partition(int[] data, int start, int end)
{
int mid_data = data[end];// 选取最后最个数作为中间值哨兵,从開始进行遍历,每一个数与之比較
int index = start; // 记录比哨兵小的数字在左端的位置或个数
// 注意要考虑start = 0的情况,和《算法导论》中的伪码有差别
for (int i = start; i < end; i++)
{
// 推断每一个值与哨兵的大小关系,小于等于则放在左边index位置处,并将index++
// 能够理解为通过index计算小于哨兵的值的个数。并将全部小于或等于的数通过交换移过来
if (data[i] <= mid_data)
{
swap(data, i, index);
index++;
}
}
// 将哨兵移动至中间处,因为data[index]肯定大于mid_data,故移至最后依旧满足算法的要求
swap(data, index, end);
return index;
} // 分治法
public void QuickSort(int[] data, int start, int end)
{
if (start < end)
{
// 原址排序,找到中间值将数组一分为二,分治法继续递归
int mid = Partition(data, start, end);
QuickSort(data, start, mid - 1);
QuickSort(data, mid + 1, end);
}
} // 无法像C++一样使用引用实现,故仅仅好使用data数组进行改变
private void swap(int[] data, int a, int b)
{
int temp = data[a];
data[a] = data[b];
data[b] = temp;
} public void print_array(int[] data)
{
for (int num : data)
{
System.out.print(num);
System.out.print(" ");
}
} public static void main(String[] args)
{ int data[] = { 2, 34, 45, 2, 13, 24, 5, 24, 57 };
Quick_Sort quick_Sort = new Quick_Sort(); quick_Sort.QuickSort(data , 0 , data.length - 1);//注意初始调用的參数值
quick_Sort.print_array(data); } }
排序算法之高速排序(Java)的更多相关文章
- Java常见排序算法之Shell排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- 常用的排序算法介绍和在JAVA的实现(二)
一.写随笔的原因:本文接上次的常用的排序算法介绍和在JAVA的实现(一) 二.具体的内容: 3.交换排序 交换排序:通过交换元素之间的位置来实现排序. 交换排序又可细分为:冒泡排序,快速排序 (1)冒 ...
- 【DS】排序算法之希尔排序(Shell Sort)
一.算法思想 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本.希尔排序是非稳定排序算法.希尔排序是基于插入排序的以下两点性质而提出改进方法的:1)插入排序在对几乎已经排好序的数据操作 ...
- 排序算法总结------选择排序 ---javascript描述
每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...
- 数据结构与算法之PHP排序算法(希尔排序)
一.基本思想 希尔排序算法是希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接 ...
- Python排序算法之选择排序定义与用法示例
Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...
- 八大排序算法~简单选择排序【记录下标k变量的作用】
八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...
- 各种排序算法的分析及java实现
排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强能写出个冒泡排序.由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间 ...
- (转)各种排序算法的分析及java实现
转自:http://www.cnblogs.com/liuling/p/2013-7-24-01.html 排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强 ...
随机推荐
- PDO 连接与连接管理
连接是通过创建 PDO 基类的实例而建立的.不管使用哪种驱动程序,都是用 PDO 类名. 构造函数接收用于指定数据库源(所谓的 DSN)以及可能还包括用户名和密码(如果有的话)的参数. 连接到 MyS ...
- [oldboy-django][4python面试]cookie和session比较
session定义(知乎网上) Session的数据不是储存在客户端上的,而是储存在服务器上的:而客户端使用Cookie储存一个服务器分配的客户端会话序号(Session ID),当客户端请求服务器时 ...
- ICPC World Finals 2018 Problem H Single Cut of Failure
题目链接 题解视频 题解文档 解法概要: 问题可以转化为 考虑一个长为 $2n$ 的数组 $A$,$1$ 到 $n$ 这 $n$ 个整数每个恰在 $A$ 中出现 $2$ 次.判断是否存在一个长为 $n ...
- SYZOJ 186 [额]你猜是不是DP(哈希+二分答案+二分搜索)
题目描述 现在给两个仅包含小写字母的字符串a,b ,求a 与b的最长公共连续子串的长度. 输入格式 两个字符串 输出格式 一个整数,为输入的两个字符串的最长公共连续子串的长度 测试样例 输入 qa ...
- Prime Gift(prime)
Prime Gift(prime) 题目描述 Jyt有nn个质数,分别为p1,p2,p3-,pnp1,p2,p3-,pn. 她认为一个数xx是优秀的,当且仅当xx的所有质因子都在这nn个质数中. 她想 ...
- Teleportation(tel)
Teleportation(tel) 题目描述 Zy大帝拥有n个星球,因为距离非常遥远,所以Zy在他所居住的1号星球和他的军事基地霸中所在的2号星球建造了两个传送门,这样从1号星球到2号星球就只需要2 ...
- Idea插件lombok的安装和使用
C#在写一个实体类时,有属性的写法,省去了写getter和setter的麻烦. 在Java编程时,写完字段后,需要一个一个去写getter和setter方法.在使用Idea编程时,可以按住ALT+IN ...
- Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理
转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava E ...
- 【HDOJ5555】Immortality of Frog(状压DP)
题意:给你一个NxN的网格,第N行的每一列都有个青蛙,这些青蛙只会往上走, 上帝会在每个膜中随机等概率放一个长生不老的药, 一共有N个膜,每个膜覆盖一些区间,如果这个区间恰好为N那么就是好膜,否则是坏 ...
- spfa代码
先来贴一下,,虽然不是自己写的 #include<iostream>#include<cstdio>#include<cstring>#include<cma ...