`

java实现快速排序算法

    博客分类:
  • Java
阅读更多
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);
}
}
}
分享到:
评论

相关推荐

    Java实现快速排序算法+编程知识+技术开发

    Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术开发; Java实现快速排序算法+编程知识+技术...

    分别使用Java和Python实现快速排序算法.zip

    快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法.zip 快速排序:分别使用Java和Python实现快速排序算法....

    快速排序算法的java实现

    以下是快速排序算法的步骤: 1. **选择基准**:从数组中选取一个元素作为基准,可以选择第一个、最后一个或者随机选择。 2. **分区操作**:遍历数组,将所有小于基准的元素移到其前面,大于基准的元素移到其后面。...

    各种排序算法比较(java实现)

    `Algorithm.java`文件可能包含了这些排序算法的Java实现代码,而`常见排序算法的实现与性能比较.doc`文档则可能详细比较了这些算法的性能和适用场景。`readme.txt`文件可能是对整个项目的简要说明,包括如何运行和...

    快速排序算法java代码

    下面我们将详细地讲解快速排序算法的java代码实现。 快速排序算法的基本思想 快速排序算法的基本思想是选择一个pivot元素,将数组分成两个部分,一部分元素小于pivot,一部分元素大于pivot,然后递归地对这两个...

    java实现常见排序算法

    总结起来,Java实现的插入排序和交换排序为程序员提供了处理各种数据排序问题的工具。了解和掌握这些排序算法不仅有助于提升编程能力,也是解决实际问题的基础,尤其是在大数据处理和性能优化方面。在实际应用中,...

    用java实现快速排序

    根据给定文件的信息,本文将围绕“用Java实现快速排序”的主题进行展开,不仅解析标题与描述中的核心知识点,还会对部分代码示例进行解读,最后结合这些信息给出一个完整的快速排序算法实现。 ### 快速排序算法简介...

    基于 Java 实现的快速排序算法(java 实现方式)

    【作品名称】:基于 Java 实现的快速排序算法(java 实现方式) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于 ...

    JAVA冒泡排序和快速排序算法

    // 实现快速排序逻辑 } } ``` 在`bubbleSort`方法中,我们可以使用两个嵌套的for循环来完成冒泡排序的过程;在`quickSort`方法中,我们需要实现分区操作,并根据返回的分割点进行递归调用。 通过这样的实现,...

    Java实现快速排序算法(Quicktsort)

    在Java中实现快速排序,我们可以按照以下步骤进行: 1. **选择基准元素**:通常选择数组的最后一个元素,但在优化版本中,可以选择数组的中位数,以减少最坏情况的发生概率。 2. **分区操作**:从数组的第一个元素...

    快速排序算法JAVA实现

    在Java中,我们可以创建一个名为`Qsort`的类来实现快速排序。这个类包含两个主要方法:`sort`和`partition`。`sort`方法是快速排序的递归入口,`partition`方法则是快速排序的核心,它负责将数组分为两部分,并返回...

    Java语言实现六种排序算法

    Java中实现快速排序的关键在于选取合适的基准元素和递归调用。 这六种排序算法在性能上各有优劣,冒泡和选择排序简单但效率较低,适用于小规模数据;插入排序在部分有序的数据中表现较好;归并排序和快速排序在大...

    用JAVA语言实现的对数据的快速排序法

    根据给定文件中的标题、描述、标签...综上所述,通过对给定文件的分析,我们不仅理解了如何使用Java实现快速排序算法,还深入了解了该算法的工作原理、性能特点以及优化方法,这对于理解和掌握快速排序具有重要意义。

    Java中快速排序算法和经典案例

    算法,我可以为您详细解释Java中快速排序算法的实现,并提供一个代码示例。快速排序是一种高效的排序算法,基于分治策略。其基本步骤如下: 1. 选择一个基准元素(pivot),通常选择数组的第一个元素或者最后一个...

    Java实现常用排序算法

    虽然树形选择排序和堆排序在这次实现中未涵盖,但理解这四种排序算法的基本原理和Java实现方式对于提升编程技能至关重要。 首先,让我们来看看插入排序。插入排序是一种简单直观的排序算法,它的工作原理类似于人们...

    Java中快速排序算法经典的代码

    当然,我可以为您详细解释Java中快速排序算法的实现,并提供一个代码示例。快速排序是一种高效的排序算法,基于分治策略。其基本步骤如下: 1. 选择一个基准元素(pivot),通常选择数组的第一个元素或者最后一个...

    JAVA实现快速排序

    JAVA实现快速排序 快速排序是一种高效的排序算法,它的实现可以分为两个部分:基本思想和复杂度分析。在基本思想中,快速排序采用“分而治之”的思想,把大的拆分为小的,小的拆分为更小的,直到序列中的所有记录均...

    java 快速排序 折半查找的界面实现 (递归与分治法)

    总的来说,快速排序和折半查找是计算机科学中不可或缺的算法,通过递归和分治策略,可以在Java中高效地实现这些算法,并结合界面设计,为用户提供直观的交互体验。在实际项目中,理解和掌握这些算法有助于优化数据...

Global site tag (gtag.js) - Google Analytics