java演示各种排序法

来源:互联网 发布:如何把3g网络变成2g 编辑:程序博客网 时间:2024/06/08 06:28
package com.test1;
import java.util.*;


public class Demo5_3 {


public static void main(String[] args) {
// TODO Auto-generated method stub


int len=100000;
int arr1[]=new int[len];
for(int i=0;i<len;i++)
{
//让程序随机产生一个1-10000的随机数
//Math.random()会产生一个0~1的数
int t=(int)(Math.random()*10000);
arr1[i]=t;
}


//int arr1[]={1,6,0,-1,9,-100,90,51,68,73,49,13};

//创建一个快速排序
QuickSort quicksort=new QuickSort();
//在排序前打印系统时间
Calendar cal=Calendar.getInstance();
System.out.println("quicksort排序前 "+cal.getTime());
quicksort.sort(0,len-1,arr1);
//重新得到实例
cal=Calendar.getInstance();
System.out.println("quicksort排序后  "+cal.getTime());




//创建一个插入排序
InsertSort insertsort=new InsertSort();
//在排序前打印系统时间
cal=Calendar.getInstance();
System.out.println("insertsort排序前 "+cal.getTime());
insertsort.sort(arr1);
//重新得到实例
cal=Calendar.getInstance();
System.out.println("insertsort排序后  "+cal.getTime());




//创建一个Bubble类
Bubble bubble=new Bubble();
//在排序前打印系统时间
cal=Calendar.getInstance();
System.out.println("bubble排序前 "+cal.getTime());
bubble.sort(arr1);
//重新得到实例
cal=Calendar.getInstance();
System.out.println("bubble排序后  "+cal.getTime());



///这里没有引用
/*
int a=12;
bubble.test(a);
System.out.println(a);
///这个也是直接传值
int b[]={12};
bubble.test1(b[0]);
System.out.println(b[0]);
///相当于是传了一个地址
bubble.test2(b);
System.out.println(b[0]);
*/


//创建一个Select类
Select select=new Select();

//在排序前打印系统时间
cal=Calendar.getInstance();
System.out.println("select排序前 "+cal.getTime());
select.sort(arr1);
//重新得到实例
cal=Calendar.getInstance();
System.out.println("select排序后  "+cal.getTime());



//输出结果

/*for(int i=0;i<arr1.length;i++)
{
System.out.print(arr1[i]+"  ");
}*/



}


}




//快速排序法
class QuickSort
{
public void sort(int left,int right,int arr[])
{
int l=left;
int r=right;
int pivot=arr[(l+r)/2];
int temp=0;

while(l<r)
{
while(arr[l]<pivot)l++;
while(arr[r]>pivot)r--;
if(l>=r)break;

temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;
if(arr[l]==pivot)--r;
if(arr[r]==pivot)++l;

}

//验证正确与否功能
/*System.out.println("the current array is ");
for(int i=0;i<7;i++)
{
System.out.print(arr[i]+"  ");
}
System.out.println();*/

if(l==r)
{
l++;
r--;
}

if(left<r)sort(left,r,arr);
if(right>l)sort(l,right,arr);

}
}






//插入排序
class InsertSort
{
//插入排序方法
public void sort(int arr[])
{
for(int i=1;i<arr.length;i++)
{
int insertVal=arr[i];
//insertVal准备和前一个数比较
int index=i-1;
while(index>=0&&insertVal<arr[index])
{
//将把arr[index]向后移动
arr[index+1]=arr[index];
//让index向前移动一位
index--;
}
//将insertVal插入到适当位置
arr[index+1]=insertVal;
}
}
}






//选择排序
class Select
{
//选择排序
public void sort(int arr[])
{
//假设第一个数是最小的
int temp=0;
for(int j=0;j<arr.length-1;j++)
{
int min=arr[j];
//记录最小数的下标
int minIndex=j;
//第一个数不参与比较

for(int k=j+1;k<arr.length;k++)
{
if(min>arr[k])
{
//修改
min=arr[k];
minIndex=k;
}
}
//找到了最小值
temp=arr[j];
arr[j]=arr[minIndex];
arr[minIndex]=temp;

}

}
}






//冒泡排序
class Bubble
{
//测试
public void test(int a)
{
a++;
}
public void test1(int a)
{
a++;
}
public void test2(int a[])
{
a[0]++;
}
//排序方法
public void sort(int arr[])
{
int temp=0;

//排序
//外层循环
for(int i=0;i<arr.length-1;i++)
{
//内层循环依次比较
for(int j=0;j<arr.length-1-i;j++)
{
if(arr[j]>arr[j+1])
{
//换位
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
}
























0 0
原创粉丝点击