Java实现的一些排序算法
排序是一个很重要很基础的算法,排序经常是性能的瓶颈,耗费数据库大量的CPU和内存。排序也经常放在应用程序里,了解排序真的很重要。
/**
*Java实现的排序法
*@authorzhangzhihong
*
*/
public class Sort {
public Sort(){
}
/**
*冒泡排序法
*@paramarrs
*/
public void sort(int[] arrs){
int temp;
for(int i=0;i<arrs.length;i++){//每循环一次,当前的i元素位置就是之后元素中最大的元素
for(int j=i+1;j<arrs.length;j++){//i位置的元素值与之后每个元素进行大小比较,每次循环只要有比i元素大的元素,就与那个元素交换位置
if(arrs[i]<arrs[j]){//默认地是由大到小排,由小到大只要将"<"改为">";下面将与大的交换位置
temp=arrs[i];
arrs[i]=arrs[j];
arrs[j]=temp;
}
}
}
}
/**
*选择排序法,为冒泡排序的改进,外层的循环一次之后才交换元素位置
*选择排序法据说是最快的
*@paramarrs
*/
public void selectSort(int[] arrs){
int temp;
for(int i=0;i<arrs.length;i++){//每循环一次,当前的i元素位置就是之后元素中最大的元素
int lowIndex = i;
for(int j=i+1;j<arrs.length;j++){//i位置的元素值与之后每个元素进行大小比较,每次循环只要有比i元素大的元素,就记住那个元素交换位置
if(arrs[lowIndex]<arrs[j]){//默认地是由大到小排,由小到大只要将"<"改为">";下面记住大元素的位置
lowIndex=j;
}
}
temp=arrs[i];
arrs[i]=arrs[lowIndex];
arrs[lowIndex]=temp;
}
}
/**
*插入排序法
*@paramdata
*/
public void insertSort(int[] data) {
int temp;
for(int i=1; i<data.length; i++){
for(int j=i; (j>0)&&(data[j]>data[j-1]); j--){
temp=data[j];
data[j]=data[j-1];
data[j-1]=temp;
}
}
}
/**
*Shell排序法,为插入法的改进
*@paramdata
*/
public void shellSort(int[] data) {
for(int i=data.length/2; i>2; i/=2){
for(int j=0; j<i; j++){
insertSort(data,j,i);
}
}
insertSort(data,0,1);
}
private void insertSort(int[] data, int start, int inc) {
int temp;
for(int i=start+inc; i<data.length; i+=inc){
for(int j=i; (j>=inc)&&(data[j]<data[j-inc]); j-=inc){
temp=data[j];
data[j]=data[j-inc];
data[j-inc]=temp;
}
}
}
public static void main(String[] args){
int[] a={5,4,3,2,8,9,8,9,7,4,3,2,4};
Sort s=new Sort();
// s.sort(a);
// s.insertSort(a);
s.selectSort(a);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
}