import java.util.Random;

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相关推荐

  1. 第二章 java常用开发工具以及程序的编写

    2019独角兽企业重金招聘Python工程师标准>>> 第二章 java常用开发工具以及程序的编写 1. 程序的概念         2. java程序的开发的三个步骤        ...

  2. 描述java源程序构成_Java第二章Java程序设计

    <Java第二章Java程序设计>由会员分享,可在线阅读,更多相关<Java第二章Java程序设计(140页珍藏版)>请在人人文库网上搜索. 1.第2章 Java基本语法,2. ...

  3. 使用java实现面向对象编程第二章_java面向对象编程——第二章 java基础语法

    第二章 java基础语法 1.java关键字 abstract boolean break byte case catch char class const continue default do d ...

  4. java 计数器越界,[总结]-第二章 Java内存区域与内存溢出异常

    [总结]-第二章 Java内存区域与内存溢出异常 一.知识点 1.虚拟机运行时数据区 方法区:运行时常量池(JDK1.7被移出) 堆:存放对象实例或数组.新生代和老年代 虚拟机栈:线程私有.栈 本地方 ...

  5. java语言定义一个具备栈功能的类_Java学习笔记 第二章 Java语言基础

    第二章 JAVA语言基础 一.关键字 1.关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有的字母都为小写 2.用于定义数据类型的关键字 c;ass  interface ...

  6. java 3D 第二章 java 3D基本概念

    java 3D 第二章 java 3D基本概念 java 3D基本概念 java 3D的包及其功能 java 3D 高分辨率大尺度坐标 Java 3D场景图(Scene Graph) VirtualU ...

  7. JavaSE入门0基础笔记 第二章Java基础语法

    JavaSE入门0基础笔记 第二章Java基础语法 1.运算符 1.1算术运算符 1.1.1运算符和表达式 1.1.2 算术运算符 1.1.3字符的"+"操作 1.1.4 字符串中 ...

  8. (Java零基础学习笔记)第二章 Java中的基本语法

    前言: 大家好! 我是BA unravel .如果你想和我一起学习JAVA,欢迎大家一起来学习这个世界上最好的语言! 学习目标: 一周掌握 Java 入门知识 学习内容: 1. 搭建 Java 开发环 ...

  9. 进击 !!第二章 JAVA编程基础

    第二章 JAVA编程基础 目标: 掌握java的基本语法,常量,变量,流程控制语句,方法以及数组 运用java运算符的使用 了解java代码的基本格式 2.1java 的基本语法 1. 代码的基本格式 ...

最新文章

  1. django 2.0路由配置变化
  2. CNN在文本分类的应用(内有代码实现) 论文Convolutional Neural Networks for Sentence Classification
  3. 男人一辈子就喜欢一种类型的女人,至死不渝从一而终!
  4. 基于OpenCV高斯模型的公共场景人流量统计
  5. 基于 Laravel 5 构建的、支持模块化和多语言的 CMS —— AsgardCMS
  6. Web 端的下一代三维图形
  7. 2.5英寸硬盘何止“五脏俱全”(硬盘构造再揭秘之四)
  8. Influxdb安装、启动influxdb控制台、常用命令、Influx命令使用、Influx-sql使用举例、Influxdb的数据格式、Influxdb客户端工具
  9. 使用相对长度单位rem布局网页内容
  10. split出现得问题
  11. Fiddler 详尽教程与抓取移动端数据包
  12. hp 服务器可以安装win7系统安装失败,如何解决win7hp1213打印机安装失败的问题
  13. Sign in - CodeProject
  14. linux终端怎么设置monaco,ubuntu16.04安装monaco字体
  15. 基于ROS的机械臂手眼标定-常见错误排查
  16. 什么是句柄,句柄有什么作用
  17. 前端页面崩溃现象处理
  18. Windows 下 VS 配置 OpenGL 环境
  19. css动画效果网站集合
  20. 松灵学院 | Scout mini 仿真指南

热门文章

  1. 2.4 理解指数加权平均
  2. Java字符串基本认识
  3. Oracle的体系结构
  4. gfdmp和mysql,《高性能MySQL》读书笔记--锁、事务、隔离级别
  5. layui tab html,layui竖版tab选项卡
  6. Server 2016DC查看五种AD角色的方法
  7. VMware vCenter Server 的内部版本号和版本 (2143838)--2020-10-27 更新
  8. 离线迁移服务(闪电立方) > 常见问题 > 数据迁移
  9. 阿里云产品汇总及解释
  10. 华为2288hv5服务器安装ESXI 6.7(三):安装ESXI(转)