排序


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);
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值