- 浏览: 179982 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (186)
- Ant (11)
- Axis2 (15)
- Car (9)
- Eclipse (1)
- Java (19)
- Java-EM (4)
- Javascript (11)
- Jsp (1)
- Hibernate (9)
- Mysql (1)
- Ms-Dos (5)
- Music (0)
- Oracle (3)
- Postgresql (0)
- Photoshop (1)
- Spring (17)
- Struts (8)
- Selenium (5)
- Ubuntu (13)
- News (17)
- Others (7)
- SSH (11)
- 算法 (5)
- FreeMarker (4)
- Tomcat (2)
- Linux (5)
最新评论
void paixu(int a[],int low,int high;)//用快速排序法
{
// low, high表示扫描的范围
int pivot;//存放中心索引及其值的局部变量
int scanup,scandown,mid;//用于扫描的索引
if (high-low<=0) //如果数组中的元素少于两个,则返回
return;
else
if(high-low==1) //如果有两个元素,对其进行比较
{
if(apai[high]<apai[low]) //如果后一个比前一个小,
Swap(apai[low],apai[high]);//那么交换位置
return;
}//end if
mid=(low+high)/2;//取得中心索引
pivot=apai[mid];//将中间索引的值,赋给pivot
Swap(apai[mid],apai[low]);//交换pivot及低端元素的值
Scanup=low+1;
Scandown=high;//初始化扫描索引scanup和scandown
do{
//从低端子表向上扫描,当scanup进入高端子表或遇到大于pivot的元素时结束.
while(scanup<=scandown && apai[scanup]<=pivot)
scanup++;
//从高端子表向下扫描,当scandown遇到小于或等于pivot的元素时结束
while(piovt<apai[scandown])
scandown--;
//如果两个索引还在各自的子表中,则表示两个元素错位,将两个元素换位
if(scanup<scandown)
Swap(apai[scanup],apai[scandown]);
}while(scanup<scandown);
//将pivot拷贝到scandown位置,分开两个子表
apai[low]=apai[scandown];
apai[scandown]=pivot;
//如果低端子表(low至scandown-1)有2个或更多个元素,则进行递归调用
if(low<scandown-1)
paixu(apai,low,scandown-1);
//如果高端子表(scandown+1至high) 有2个或更多个元素,则进行递归调用
if(scandown+1<high)
paixu(apai, scandown+1, high);
}
其他排序:
import java.io.*;
interface Item
{
public boolean less(Item v);
}
class Recod
{
int id;
String name;
double balance;
static int flag=2;
}
class Sort
{
static boolean less(Item v,Item w)
{
return v.less(w);
}
static void compExch(Item a[],int i,int j)
{
if(less(a[i],a[j]))
exch(a,i,j);
}
static void exch(Item a[],int i,int j)
{
Item t=a[i]; a[i]=a[j]; a[j]=t;
}
//选择排序
static void selSort(Item a[],int l,int r)
{
for(int i=l;i<=r;i++)
{
int max=i;
for(int j=i+1;j<=r;j++)
{
if(less(a[max],a[j])) max=j;
}
if(max!=i)
exch(a,i,max);
}
}
//冒泡
static void maoSort(Item a[],int l,int r)
{
for(int i=l;i<=r;i++)
{
int flag=1;
for(int j=r;j>i;j--)
{
if(less(a[j-1],a[j]))
{
exch(a,j-1,j);
flag=0;
}
}
if(flag==1) break;
}
}
//插入
static void insertSort(Item a[],int l,int r)
{
Item item;
int j=0;
for(int i=1+l;i<=r;i++)
{
item=a[i];
j=i-1;
while(j>=l && less(a[j],item))
{
a[j+1]=a[j];
j--;
}
a[j+1]=item;
}
}
//快排(三路取中加小文件截断)
static void quickSort(Item a[],int l,int r)
{
if((r-l)<=10) insertSort(a,l,r);
else
{
if(l<r)
{
int i=l,j=r,k=(l+r)/2;
compExch(a,r,k);
compExch(a,r,l);
compExch(a,k,l);
exch(a,k,l);
Item item=a[i];
while(i!=j)
{
while(i<j && less(a[j],item))
j--;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j && less(item,a[i]))
i++;
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=item;
quickSort(a,l,i-1);
quickSort(a,i+1,r);
}
}
}
//希尔排序
static void shellSort(Item a[],int l,int r)
{
int d=r/2;
Item item;
while(d>0)
{
for(int i=d;i<=r;i++)
{
int j=i-d;
while(j>=l && less(a[j],a[j+d]))
{
item=a[j];
a[j]=a[j+d];
a[j+d]=item;
j=j-d;
}
}
d=d/2;
}
}
}
public class Quick extends Recod implements Item
{
public boolean less(Item v)
{
Quick qu=(Quick)v;
switch(flag)
{
case 2: return id<qu.id;
case 1: return name.compareTo(qu.name)<0;
default:return balance<qu.balance;
}
}
public static void main(String[]args)
{
Quick a[]=new Quick[2000];
for(int i=0;i<2000;i++)
{
a[i]=new Quick();
a[i].id=(int)(1+Math.round(Math.random()*100));
a[i].name="ren"+String.valueOf(i);
a[i].balance=10+Math.random()*100;
System.out.println(a[i].id+" "+a[i].balance);
}
Sort.quickSort(a,0,1999);
System.out.println("**************");
if(flag==2)
for(int j=0;j<2000;j++)
{
System.out.println(a[j].id+" "+a[j].name);
}
else
{
for(int j=0;j<2000;j++)
System.out.println(a[j].balance+" "+a[j].name);
}
}
}
{
// low, high表示扫描的范围
int pivot;//存放中心索引及其值的局部变量
int scanup,scandown,mid;//用于扫描的索引
if (high-low<=0) //如果数组中的元素少于两个,则返回
return;
else
if(high-low==1) //如果有两个元素,对其进行比较
{
if(apai[high]<apai[low]) //如果后一个比前一个小,
Swap(apai[low],apai[high]);//那么交换位置
return;
}//end if
mid=(low+high)/2;//取得中心索引
pivot=apai[mid];//将中间索引的值,赋给pivot
Swap(apai[mid],apai[low]);//交换pivot及低端元素的值
Scanup=low+1;
Scandown=high;//初始化扫描索引scanup和scandown
do{
//从低端子表向上扫描,当scanup进入高端子表或遇到大于pivot的元素时结束.
while(scanup<=scandown && apai[scanup]<=pivot)
scanup++;
//从高端子表向下扫描,当scandown遇到小于或等于pivot的元素时结束
while(piovt<apai[scandown])
scandown--;
//如果两个索引还在各自的子表中,则表示两个元素错位,将两个元素换位
if(scanup<scandown)
Swap(apai[scanup],apai[scandown]);
}while(scanup<scandown);
//将pivot拷贝到scandown位置,分开两个子表
apai[low]=apai[scandown];
apai[scandown]=pivot;
//如果低端子表(low至scandown-1)有2个或更多个元素,则进行递归调用
if(low<scandown-1)
paixu(apai,low,scandown-1);
//如果高端子表(scandown+1至high) 有2个或更多个元素,则进行递归调用
if(scandown+1<high)
paixu(apai, scandown+1, high);
}
其他排序:
import java.io.*;
interface Item
{
public boolean less(Item v);
}
class Recod
{
int id;
String name;
double balance;
static int flag=2;
}
class Sort
{
static boolean less(Item v,Item w)
{
return v.less(w);
}
static void compExch(Item a[],int i,int j)
{
if(less(a[i],a[j]))
exch(a,i,j);
}
static void exch(Item a[],int i,int j)
{
Item t=a[i]; a[i]=a[j]; a[j]=t;
}
//选择排序
static void selSort(Item a[],int l,int r)
{
for(int i=l;i<=r;i++)
{
int max=i;
for(int j=i+1;j<=r;j++)
{
if(less(a[max],a[j])) max=j;
}
if(max!=i)
exch(a,i,max);
}
}
//冒泡
static void maoSort(Item a[],int l,int r)
{
for(int i=l;i<=r;i++)
{
int flag=1;
for(int j=r;j>i;j--)
{
if(less(a[j-1],a[j]))
{
exch(a,j-1,j);
flag=0;
}
}
if(flag==1) break;
}
}
//插入
static void insertSort(Item a[],int l,int r)
{
Item item;
int j=0;
for(int i=1+l;i<=r;i++)
{
item=a[i];
j=i-1;
while(j>=l && less(a[j],item))
{
a[j+1]=a[j];
j--;
}
a[j+1]=item;
}
}
//快排(三路取中加小文件截断)
static void quickSort(Item a[],int l,int r)
{
if((r-l)<=10) insertSort(a,l,r);
else
{
if(l<r)
{
int i=l,j=r,k=(l+r)/2;
compExch(a,r,k);
compExch(a,r,l);
compExch(a,k,l);
exch(a,k,l);
Item item=a[i];
while(i!=j)
{
while(i<j && less(a[j],item))
j--;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j && less(item,a[i]))
i++;
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=item;
quickSort(a,l,i-1);
quickSort(a,i+1,r);
}
}
}
//希尔排序
static void shellSort(Item a[],int l,int r)
{
int d=r/2;
Item item;
while(d>0)
{
for(int i=d;i<=r;i++)
{
int j=i-d;
while(j>=l && less(a[j],a[j+d]))
{
item=a[j];
a[j]=a[j+d];
a[j+d]=item;
j=j-d;
}
}
d=d/2;
}
}
}
public class Quick extends Recod implements Item
{
public boolean less(Item v)
{
Quick qu=(Quick)v;
switch(flag)
{
case 2: return id<qu.id;
case 1: return name.compareTo(qu.name)<0;
default:return balance<qu.balance;
}
}
public static void main(String[]args)
{
Quick a[]=new Quick[2000];
for(int i=0;i<2000;i++)
{
a[i]=new Quick();
a[i].id=(int)(1+Math.round(Math.random()*100));
a[i].name="ren"+String.valueOf(i);
a[i].balance=10+Math.random()*100;
System.out.println(a[i].id+" "+a[i].balance);
}
Sort.quickSort(a,0,1999);
System.out.println("**************");
if(flag==2)
for(int j=0;j<2000;j++)
{
System.out.println(a[j].id+" "+a[j].name);
}
else
{
for(int j=0;j<2000;j++)
System.out.println(a[j].balance+" "+a[j].name);
}
}
}
发表评论
-
JAVA中建立多线程的典型例子
2008-10-24 21:23 748JAVA中建立多线程,无非两种方式,一是继承自thread类 ... -
解决 Java 程序的乱码问题
2008-10-28 19:19 671早上来上班,同事问在本机好好的 Java 程序,放到服务器上运 ... -
编写对GC友好,又不泄漏的代码
2008-10-31 14:07 668编写对GC友好,又不泄 ... -
java实现给图片添加水印和文字
2008-10-31 18:49 781import java.io.*; import com.su ... -
当我调用 ProductService继承BaseService的方法时,提示我BaseDao属性null
2008-10-31 18:59 910转自:http://hi.baidu.com/annleecn ... -
Java实现分类文件拷贝1
2008-10-31 19:12 960在Java中对文件进行分类 如果你是个Java程序员,也许你 ... -
Java实现分类文件拷贝2
2008-10-31 19:13 693对于对老文件的修改,我 ... -
Java实现分类文件拷贝3
2008-10-31 19:14 698java.io.BufferedWriter; import ... -
Java实现分类文件拷贝4
2008-10-31 19:15 678tputStream fos=new FileOutputSt ... -
j2ee清除缓存的三句话
2008-10-31 19:19 513在ajax中经常会遇到一个问题,就是有重复请求的时候,ajax ... -
java中回调的实现
2008-10-31 19:22 646//定义一个接口 interface Incrementabl ... -
java的窗口关闭问题
2008-10-31 19:24 966java的窗口关闭可以实现windowLinstener接口来 ... -
关于 DAO 接口设计的思考
2008-11-07 11:03 672需求: 现在要设计 3 个 DAO 分对 Wind, Hors ... -
如何比较两个有可能为null的实例
2008-11-09 16:37 816如何比较两个有可能为null的实例 以前在写程序 ... -
Java 理论与实践: 嗨,我的线程到哪里去了?
2008-11-21 21:11 683Java 理论与实践: 嗨,我的 ... -
详细解析Java中抽象类和接口的区别
2008-11-26 20:39 679详细解析Java中抽象类 ... -
Java获取系统所有进程(转)
2009-02-06 12:36 927代码比较简单,就不那么讲究了。一个 main 写了吧。 im ... -
MD5加密 Java代码
2008-12-15 19:29 806因为代码太长,无法贴上来,所以传到了网盘上,可以下载 点击下 ...
相关推荐
Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术...
快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法....
以下是快速排序算法的步骤: 1. **选择基准**:从数组中选取一个元素作为基准,可以选择第一个、最后一个或者随机选择。 2. **分区操作**:遍历数组,将所有小于基准的元素移到其前面,大于基准的元素移到其后面。...
`Algorithm.java`文件可能包含了这些排序算法的Java实现代码,而`常见排序算法的实现与性能比较.doc`文档则可能详细比较了这些算法的性能和适用场景。`readme.txt`文件可能是对整个项目的简要说明,包括如何运行和...
下面我们将详细地讲解快速排序算法的java代码实现。 快速排序算法的基本思想 快速排序算法的基本思想是选择一个pivot元素,将数组分成两个部分,一部分元素小于pivot,一部分元素大于pivot,然后递归地对这两个...
总结起来,Java实现的插入排序和交换排序为程序员提供了处理各种数据排序问题的工具。了解和掌握这些排序算法不仅有助于提升编程能力,也是解决实际问题的基础,尤其是在大数据处理和性能优化方面。在实际应用中,...
根据给定文件的信息,本文将围绕“用Java实现快速排序”的主题进行展开,不仅解析标题与描述中的核心知识点,还会对部分代码示例进行解读,最后结合这些信息给出一个完整的快速排序算法实现。 ### 快速排序算法简介...
【作品名称】:基于 Java 实现的快速排序算法(java 实现方式) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于 ...
// 实现快速排序逻辑 } } ``` 在`bubbleSort`方法中,我们可以使用两个嵌套的for循环来完成冒泡排序的过程;在`quickSort`方法中,我们需要实现分区操作,并根据返回的分割点进行递归调用。 通过这样的实现,...
在Java中实现快速排序,我们可以按照以下步骤进行: 1. **选择基准元素**:通常选择数组的最后一个元素,但在优化版本中,可以选择数组的中位数,以减少最坏情况的发生概率。 2. **分区操作**:从数组的第一个元素...
在Java中,我们可以创建一个名为`Qsort`的类来实现快速排序。这个类包含两个主要方法:`sort`和`partition`。`sort`方法是快速排序的递归入口,`partition`方法则是快速排序的核心,它负责将数组分为两部分,并返回...
Java中实现快速排序的关键在于选取合适的基准元素和递归调用。 这六种排序算法在性能上各有优劣,冒泡和选择排序简单但效率较低,适用于小规模数据;插入排序在部分有序的数据中表现较好;归并排序和快速排序在大...
根据给定文件中的标题、描述、标签...综上所述,通过对给定文件的分析,我们不仅理解了如何使用Java实现快速排序算法,还深入了解了该算法的工作原理、性能特点以及优化方法,这对于理解和掌握快速排序具有重要意义。
算法,我可以为您详细解释Java中快速排序算法的实现,并提供一个代码示例。快速排序是一种高效的排序算法,基于分治策略。其基本步骤如下: 1. 选择一个基准元素(pivot),通常选择数组的第一个元素或者最后一个...
虽然树形选择排序和堆排序在这次实现中未涵盖,但理解这四种排序算法的基本原理和Java实现方式对于提升编程技能至关重要。 首先,让我们来看看插入排序。插入排序是一种简单直观的排序算法,它的工作原理类似于人们...
当然,我可以为您详细解释Java中快速排序算法的实现,并提供一个代码示例。快速排序是一种高效的排序算法,基于分治策略。其基本步骤如下: 1. 选择一个基准元素(pivot),通常选择数组的第一个元素或者最后一个...
JAVA实现快速排序 快速排序是一种高效的排序算法,它的实现可以分为两个部分:基本思想和复杂度分析。在基本思想中,快速排序采用“分而治之”的思想,把大的拆分为小的,小的拆分为更小的,直到序列中的所有记录均...
总的来说,快速排序和折半查找是计算机科学中不可或缺的算法,通过递归和分治策略,可以在Java中高效地实现这些算法,并结合界面设计,为用户提供直观的交互体验。在实际项目中,理解和掌握这些算法有助于优化数据...