几种简单排序算法程序
都会用到的方法
pubic static void swap(int []array,int i,int j){
int tem=array[i];
array[i]=array[j];
array[j]=tem;
}
选择排序
public static void selectionSort(int [] array){
for(int i=0;i<array.length-1;i++){
int index=i;
for(int j=i+1;j<array.lenght;j++)
{if(array[i]<array[j])
index=j;}
if(index!=i)
swap(array,index,i);
}
}
冒泡排序
public static void selectionSort(int [] array){
for(int i=0;i<array.length-1;i++){
boolean isloop=false; //标志量,可以提高性能;
for(int j=0;j<array.length-i-1;j++)
if(array[j]<array[j+1])
{swap(array,j,j+1);
isloop=true;}
if(!isloop)
return;
}
}
插入排序
public static void selectionSort(int[] array){
for(int i=1;i<array.length;i++){
int index=array[i]; //要在下次循环中插入的元素;
int j=i-1;
while(j>=0){ //从跟前一个元素比较循环开始
if(index<array[j])
{array[j+1]=array[j] //若符合条件则向后移一个位
j--;}
else break;
}
array[j+1]=index;
}
}
快速排序
public int getpivot(int [] array,int low,int high){
int i;
int boundary;
int middle;
int pivot;
int temp;
middle=(low+high)/2;
pivot=array[middle];
array[middle]=array[high];array[high]=pivot;
boundary=low;
for(i=low;i<high;i++){
if(array[i]<pivot){
temp=array[boundary];array[boundary]=array[i];array[i]=temp;
boundary++;}
}
temp=array[high];array[high]=array[boundary];array[boundary]=temp;
return boundary;
}
//在每次确定完边界后也就已将把pivot放到了数组中的正确位置;务必记住;
public static void quick(int []a){
quickhelp(a,0,a.length-1);
}
public static void quickhelp(int[] a,int low,int high){
if(low<high){
int pivotloca=getpivot(a,low,high);
quickhelp(a,low,pivotloca-1);
quickhelp(a,pivotloca+1,high);
}
}
归并排序
public static void mergeSort(int [] a){
int [] copybuffer=new int[a.length];
mergeSortHelper(a,copybuffer,0,a.length-1);
}
private static void mergeSortHelper(int [] a,int[]copybuffer,int low,int high){
if(low<high){
int middle=(high+low)/2;
mergeSortHelper(a,copyBuffer,low,middle);
mergeSortHelper(a,copyBuffer,middle+1,high);
merge(a,copyBuffer,low,middle,high);
}
}
private static void merge(int [] a,int [] copyBuffer,int low,int middle,int high){
int i1=low,i2=middle+1;
for(int i=low;i<=high;i++){
if(i1>middle)
copybuffer[i]=a[i2++];
else if(i2>high)
copybuffer[i]=a[i1++];
else if(a[i1]<a[i2])
copybuffer[i]=a[i1++];
else
copybuffer[i]=a[i2++];
}
for(int i=low;i<=high;i++){
a[i]=copybuffer[i];
}
}