practical of programming 第二章 java的quick sort
class Quicksort {
//随机数的生成
static Random rgen = new Random();
//Quicksort.rand: return random integer in [left,right]
static int rand(int left, int right){
//Java随机数生成器的返回值可正可负, 所以用Math.abs
return left + Math.abs(rgen.nextInt()%(right-left+1));
}
//Quicksort.swap: swap v[i] and v[j]
static void swap(Object[] v, int i, int j){
Object temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
//Quicksort.sort: quicksort v[left]..v[right]
static void sort(Object[] v, int left, int right, Cmp cmp){
int i, last;
if(left>=right)//nothing to do
return;
swap(v,left,rand(left,right)); //move pivot elem
last = left;
for(i = left+1; i<=right; i++) //partition
if(cmp.cmp(v[i],v[left])<0)
swap(v,++last,i);
swap(v,left,last);
sort(v,left,last-1,cmp); //recursively sort first half
sort(v,last+1,right,cmp); //the second part
}
}
interface Cmp{//用于比较的函数接口
int cmp(Object x, Object y);
}
//整型 类型的比较实现
class Icmp implements Cmp{
public int cmp(Object o1, Object o2){
int i1 = ((Integer)o1).intValue();
int i2 = ((Integer)o2).intValue();
if (i1<i2)
return -1;
else if (i1==i2)
return 0;
else
return 1;
}
}
// 字符串比较
class Scmp implements Cmp{
public int cmp(Object o1, Object o2){
String s1 = (String)o1;
String s2 = (String)o2;
return s1.compareTo(s2);
}
}
public class Qsort{
public static void main(String[] args){
String[] sarr = new String[5];
sarr[0] = "Steve";
sarr[1] = "Bill";
sarr[2] = "Eric";
sarr[3] = "Claire";
sarr[4] = "Peter";
Quicksort.sort(sarr,0,sarr.length-1, new Scmp());
for(int p = 0; p < 5; p++){
System.out.println(sarr[p]);
}
System.out.println("OK!");
}
}
转载于:https://www.cnblogs.com/aquar/archive/2010/02/23/3451496.html
practical of programming 第二章 java的quick sort相关推荐
- 第二章 java常用开发工具以及程序的编写
2019独角兽企业重金招聘Python工程师标准>>> 第二章 java常用开发工具以及程序的编写 1. 程序的概念 2. java程序的开发的三个步骤 ...
- 描述java源程序构成_Java第二章Java程序设计
<Java第二章Java程序设计>由会员分享,可在线阅读,更多相关<Java第二章Java程序设计(140页珍藏版)>请在人人文库网上搜索. 1.第2章 Java基本语法,2. ...
- 使用java实现面向对象编程第二章_java面向对象编程——第二章 java基础语法
第二章 java基础语法 1.java关键字 abstract boolean break byte case catch char class const continue default do d ...
- java 计数器越界,[总结]-第二章 Java内存区域与内存溢出异常
[总结]-第二章 Java内存区域与内存溢出异常 一.知识点 1.虚拟机运行时数据区 方法区:运行时常量池(JDK1.7被移出) 堆:存放对象实例或数组.新生代和老年代 虚拟机栈:线程私有.栈 本地方 ...
- java语言定义一个具备栈功能的类_Java学习笔记 第二章 Java语言基础
第二章 JAVA语言基础 一.关键字 1.关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有的字母都为小写 2.用于定义数据类型的关键字 c;ass interface ...
- java 3D 第二章 java 3D基本概念
java 3D 第二章 java 3D基本概念 java 3D基本概念 java 3D的包及其功能 java 3D 高分辨率大尺度坐标 Java 3D场景图(Scene Graph) VirtualU ...
- JavaSE入门0基础笔记 第二章Java基础语法
JavaSE入门0基础笔记 第二章Java基础语法 1.运算符 1.1算术运算符 1.1.1运算符和表达式 1.1.2 算术运算符 1.1.3字符的"+"操作 1.1.4 字符串中 ...
- (Java零基础学习笔记)第二章 Java中的基本语法
前言: 大家好! 我是BA unravel .如果你想和我一起学习JAVA,欢迎大家一起来学习这个世界上最好的语言! 学习目标: 一周掌握 Java 入门知识 学习内容: 1. 搭建 Java 开发环 ...
- 进击 !!第二章 JAVA编程基础
第二章 JAVA编程基础 目标: 掌握java的基本语法,常量,变量,流程控制语句,方法以及数组 运用java运算符的使用 了解java代码的基本格式 2.1java 的基本语法 1. 代码的基本格式 ...
最新文章
- django 2.0路由配置变化
- CNN在文本分类的应用(内有代码实现) 论文Convolutional Neural Networks for Sentence Classification
- 男人一辈子就喜欢一种类型的女人,至死不渝从一而终!
- 基于OpenCV高斯模型的公共场景人流量统计
- 基于 Laravel 5 构建的、支持模块化和多语言的 CMS —— AsgardCMS
- Web 端的下一代三维图形
- 2.5英寸硬盘何止“五脏俱全”(硬盘构造再揭秘之四)
- Influxdb安装、启动influxdb控制台、常用命令、Influx命令使用、Influx-sql使用举例、Influxdb的数据格式、Influxdb客户端工具
- 使用相对长度单位rem布局网页内容
- split出现得问题
- Fiddler 详尽教程与抓取移动端数据包
- hp 服务器可以安装win7系统安装失败,如何解决win7hp1213打印机安装失败的问题
- Sign in - CodeProject
- linux终端怎么设置monaco,ubuntu16.04安装monaco字体
- 基于ROS的机械臂手眼标定-常见错误排查
- 什么是句柄,句柄有什么作用
- 前端页面崩溃现象处理
- Windows 下 VS 配置 OpenGL 环境
- css动画效果网站集合
- 松灵学院 | Scout mini 仿真指南