冒泡排序
两两对比,交换位置,每次确定最后一个数
/**
* 冒泡排序
* @param array
* @return
*/
public static int[] BubbleSort(int[] array){
if(array.length==0 || array==null){
return array;
}
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length-i-1;j++){
if(array[j]>array[j+1]){
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
return array;
}
选择排序
选择最大值或者最小值 往前排
/**
* 选择排序
* @param array
* @return
*/
public static int[] SelectionSort(int[] array){
if(array.length==0 || array==null){
return array;
}
for(int i=0;i<array.length;i++){
int max=i;
for(int j=i+1;j<array.length;j++){
if(array[j]>array[max]){
max=j;
}
}
int tmp=array[i];
array[i]=array[max];
array[max]=tmp;
}
return array;
}
插入排序
/**
* 插入排序
* @param array
* @return
*/
public static int[] InsertSort(int[] array){
if(array.length==0 || array==null){
return array;
}
for(int i=0;i<array.length;i++) {
for(int j=i;j>0;j--){
if(array[j]>array[j-1]){
int tmp=array[j];
array[j]=array[j-1];
array[j-1]=tmp;
}
}
}
return array;
}
快速排序
归并排序
分治法
/**
* 归并排序
* @param array
* @param low
* @param high
* @return
*/
public static int[] MergeSort(int[] array,int low,int high){
int mid = (low+high)/2;
if(low<high){
MergeSort(array,low,mid);
MergeSort(array,mid+1,high);
//左右归并
merge(array,low,mid,high);
}
return array;
}
public static void merge(int[] array, int low, int mid, int high) {
int[] temp = new int[high-low+1];
int i= low;
int j = mid+1;
int k=0;
// 把较小的数先移到新数组中
while(i<=mid && j<=high){
if(array[i]<array[j]){
temp[k++] = array[i++];
}else{
temp[k++] = array[j++];
}
}
// 把左边剩余的数移入数组
while(i<=mid){
temp[k++] = array[i++];
}
// 把右边边剩余的数移入数组
while(j<=high){
temp[k++] = array[j++];
}
// 把新数组中的数覆盖nums数组
for(int x=0;x<temp.length;x++){
array[x+low] = temp[x];
}
}