JAVA 几种常用排序的实现

来源:互联网 发布:淘宝那个助手好 编辑:程序博客网 时间:2024/05/21 20:17

/**
 * 功能:排序
 * huwb

 * 2013.9.4
 */
package arraytest;
import java.util.*;
public class seq_1 {

 /**
  * @param args
  */
 public static void main(String[] args) {

  int len=5000000;
  int arr1[]=new int[len];
//  int arr2[]=new int[len];
//  int arr3[]=new int[len];
  int arr4[]=new int[len];
  int p=0;
  
  if (len>5000)
   p=5000;
  else
   p=len;
  
  for (int i=0;i<len;i++)
  {
   int t=(int)(Math.random()*10000000);
   arr1[i]=t;
  }
  
//  arr2=arr1;
//  arr3=arr1;
  arr4=arr1;
  
//  Select s=new Select();
//  Bubble b=new Bubble(); 
//  Insert i=new Insert();
  
  
  Quick  q=new Quick();
  
  Calendar cal1=Calendar.getInstance();  
//  System.out.println(cal1.getTime());
//  
//  b.sort(arr1);
//  
//  cal1=Calendar.getInstance();  
//  System.out.println(cal1.getTime()); 
//  for (int m=0;m<p;m++)
//  {
//   System.out.print(arr1[m] + " ");
//  }
//  System.out.println( ); 
//  
//     
//  cal1=Calendar.getInstance(); 
//  System.out.println(cal1.getTime()); 
//  
//  s.sort(arr2);
//    
//  cal1=Calendar.getInstance();  
//  System.out.println(cal1.getTime()); 
//  
//  for (int j=0;j<p;j++)
//  {
//   System.out.print(arr2[j] + " ");
//  }
//  System.out.println( ); 
//  
//  cal1=Calendar.getInstance();  
//  System.out.println(cal1.getTime());
//  
//  i.sort(arr3);
//  
//  cal1=Calendar.getInstance();  
//  System.out.println(cal1.getTime()); 
//   
//  for (int m=0;m<p;m++)
//  {
//   System.out.print(arr3[m] + " ");
//  }
  
  System.out.println( ); 
  
//  cal1=Calendar.getInstance();  
  System.out.println(cal1.getTime());
  Date d1=new Date();
  
  q.sort(0,arr4.length-1,arr4);

  Date d2=new Date();
  System.out.println("快速排序时间:" + (d2.getTime() - d1.getTime())/1000);
  cal1=Calendar.getInstance();  
  System.out.println(cal1.getTime()); 
   
  for (int l=0;l<p;l++)
  {
   System.out.print(arr4[l] + " ");
  }
 }
}


//选择排序
class Select
{
 public void sort(int arr[])
 {
  if (arr.length < 2) return;
  int temp=0;
  int index=0;
  int min=0;
  Date d1=new Date();
  for (int i=0;i<arr.length;i++)
  { index=i;
   min=arr[i];
   for (int j=i+1;j<arr.length;j++)
   {
//    seq_1.counter++;
    if (arr[j]<min)
    {
     index=j;
     min=arr[j];
    } 
   }
   temp=arr[i];
   arr[i]=arr[index];
   arr[index]=temp;
  }
  Date d2=new Date();
  System.out.println("选择排序时间:" + (d2.getTime() - d1.getTime())/1000);
 }
}

//冒泡排序
class Bubble
{
 public void sort(int arr[])
 {
  if (arr.length < 2) return;
  int temp=0;
  Date d1=new Date();
  for (int i=0;i<arr.length-1;i++)
  { 
   for (int j=0;j<arr.length-1-i;j++)
   {
//    seq_1.counter++;
    if (arr[j+1]<arr[j])
    {
     temp=arr[j];
     arr[j]=arr[j+1];
     arr[j+1]=temp;
    }
   }   
  }
  Date d2=new Date();
  System.out.println("冒泡排序时间:" + (d2.getTime() - d1.getTime())/1000);
 }
}

//快速排序
class Quick
{
 public void sort(int left,int right,int arr[])
 {
  
  //排序开始
  if(right<=left) return;
  if(arr==null||arr.length==0)return;
  
  int temp=0;
  int r=right;
  int l=left;
  
  //arr[left];//关键值为数组最左边的数据
  
  do
  {
   //由后面向前找,找到比arr[left]值小的就停止,停止条件是arr[right]<arr[right]
   while(left<right&&arr[left]<=arr[right])right--;
   
   //arr[left]值和arr[right]交换,交换后关键值存在于arr[right]中
   if (left<right)
   {
    temp=arr[right];
    arr[right]=arr[left];
    arr[left]=temp;
   }
   
   //由前往后找,找到比arr[right]值大的就停止,停止的条件是arr[left]>arr[right]
   while(left<right&&arr[right]>=arr[left])left++;
   
   //因为关键值存在于arr[right]中,所以arr[right]和arr[left]交换
   if (left<right)
   {
    temp=arr[right];
    arr[right]=arr[left];
    arr[left]=temp;
   }
  }while(right>left);//当right=left时退出循环
  
  if (r -right>1) sort(right+1,r,arr);
  if (left-l > 1) sort(l,left-1,arr);
   
 }
}

//插入排序
class Insert
{
 public void sort(int arr[])
 {
  Date d1=new Date();
  if (arr.length < 2) return;
  int temp=0;
  //从第二个开始与第一个比较
  for (int i=1;i<arr.length;i++)
  {
   //第I个值与前面排序好的数分别比较
   for(int j=i-1;j>=0;j--)
   {
    temp=arr[i];
    if(arr[i]<arr[j])
    {    
     //比当前值大的数往后移     
     arr[j+1] =arr[j];     
     arr[j]=temp;//把第I个值插入到J的位置
     break; 
    }
   }
  }
  Date d2=new Date();
  System.out.println("插入排序时间:" + (d2.getTime() - d1.getTime())/1000);
 }
}

原创粉丝点击