Java排序算法
2018-03-20 14:58:36
855次阅读
0个评论
package test;
public class SortDemo {
/**
* 输出数组
* @param a
*/
public static void show(int[] a){
for(int i:a){
System.out.print(i+" ");
}
System.out.println();
}
/**
* 交换元素
* @param a
* @param i
* @param j
*/
public static void swap(int[] a,int i,int j){
if(i<0||j<0||i>a.length||j>a.length){
return ;
}
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
/**
* 选择排序
* @param a
*/
public static void selectSort(int[] a){
if(a==null){return;}
for(int i=0;i<a.length-1;i++){//剩下最后一个元素是最大值
int min=i;
for(int j=i+1;j<a.length;j++){
if(a[j]<a[min]){
min=j;
}
}
if(min>i){
swap(a,i,min);
}
}
}
/**
* 插入排序
* @param a
*/
public static void insertSort(int[] a){
if(a==null){return;}
//a[0]已经有序
for(int i=1;i<a.length;i++){//i指向需要插入的元素
for(int j=i;j>0;j--){//j指向当前待排元素
if(a[j-1]>a[j]){
swap(a,j-1,j);
}
}
}
}
/**
* 一趟快速排序
* @param a
* @param low
* @param high
* @return
*/
public static int partition(int[] a,int low,int high){
int key=a[low];
while(low<high){
while(low<high && a[high]>=key) high--;
a[low]=a[high];
while(low<high && a[low]<=key) low++;
a[high]=a[low];
}
a[low]=key;
return low;
}
/**
* 快速排序
*/
public static void quickSort(int[] a,int start,int end){
if(start>=end){
return;
}
int index=partition(a,start,end);
quickSort(a,start,index-1);
quickSort(a,index+1,end);
}
public static void main(String[] args) {
int[] a1={49,3,17,6,29,58,9,49,31,87};
selectSort(a1);
show(a1);
int[] a2={49,3,17,6,29,58,9,49,31,87};
insertSort(a2);
show(a2);
int[] a3={49,3,17,6,29,58,9,49,31,87};
quickSort(a3,0,a3.length-1);
show(a3);
}
}
00