java通用的各种排序算法(改进版,以后还添加).

来源:互联网 发布:c语言查找字符串位置 编辑:程序博客网 时间:2024/06/06 04:00

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

    }

}

}