public class Mainx {
/**
* 交换数组内的两个数据
* @param array
* @param i
* @param j
*/
public static void swap(int array[],int i,int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
/**
* 直接插入排序
* @param array
* @param start
* @param end
*/
public static void directInsertSort(int array[],int start,int end){
if(start >= end){
return;
}
for(int i=1;i<=end;i++){
for(int j=i;j>0;j--){
if(array[j-1] > array[j]){
int temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
}
}
}
/**
* 冒泡排序
* @param array
* @param len
*/
public static void bubbleSort(int array[],int len){
if(len <= 1){
return;
}
for(int i=0;i<len;i++){
for(int j=0;j<len-i-1;j++){
if(array[j] > array[j+1]){
swap(array,j,j+1);
}
}
}
}
/**
* 选择性排序
* @param array
* @param len
*/
public static void selectSort(int array[],int len){
if(array==null || len <= 1){
return;
}
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++){
if(array[i] > array[j]){
swap(array,i,j);
}
}
}
}
/**
* 快速排序
* @param array
* @param start
* @param end
*/
public static void quickSort(int array[],int start,int end){
if(start >= end){
return;
}
int flag = array[start];
int i = start,j = end;
while(i < j){
while(i<j && array[j]>=flag){
j--;
}
array[i] = array[j];
while(i<j && array[i]<=flag){
i++;
}
array[j] = array[i];
}
array[i] = flag;
quickSort(array,start,i-1);
quickSort(array,i+1,end);
}
/**
* 合并数组
* @param array
* @param s1
* @param e1
* @param s2
* @param e2
*/
public static void subMergSort(int array[],int s1,int e1,int s2,int e2){
int temp[] = new int[array.length];
int start=s1,end=e2;
int index = s1;
while(s1<=e1 && s2<=e2){
if(array[s1] > array[s2]){
temp[index++] = array[s2++];
}else{
temp[index++] = array[s1++];
}
}
while(s1 <= e1){
temp[index++] = array[s1++];
}
while(s2 <= e2){
temp[index++] = array[s2++];
}
for(int i=start;i<=end;i++){
array[i] = temp[i];
}
print(array);
temp = null;
}
/**
* 归并排序
* @param array
* @param start
* @param end
*/
public static void mergeSort(int array[],int start,int end){
if(start >= end){
return;
}
int mid = (start+end)/2;
mergeSort(array,start,mid);
mergeSort(array,mid+1,end);
subMergSort(array,start,mid,mid+1,end);
}
public static void print(int array[]){
for(int i=0;i<array.length;i++){
System.out.print(array[i] + " ");
}
System.out.println();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int array[] = new int[]{8,7,6,5,4,3,2,1};
//directInsertSort(array,0,array.length-1);
//bubbleSort(array,array.length);
//selectSort(array,array.length);
//quickSort(array,0,array.length-1);
//subMergSort(array,0,3,4,7);
mergeSort(array,0,7);
print(array);
}
}
/**
* 交换数组内的两个数据
* @param array
* @param i
* @param j
*/
public static void swap(int array[],int i,int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
/**
* 直接插入排序
* @param array
* @param start
* @param end
*/
public static void directInsertSort(int array[],int start,int end){
if(start >= end){
return;
}
for(int i=1;i<=end;i++){
for(int j=i;j>0;j--){
if(array[j-1] > array[j]){
int temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
}
}
}
/**
* 冒泡排序
* @param array
* @param len
*/
public static void bubbleSort(int array[],int len){
if(len <= 1){
return;
}
for(int i=0;i<len;i++){
for(int j=0;j<len-i-1;j++){
if(array[j] > array[j+1]){
swap(array,j,j+1);
}
}
}
}
/**
* 选择性排序
* @param array
* @param len
*/
public static void selectSort(int array[],int len){
if(array==null || len <= 1){
return;
}
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++){
if(array[i] > array[j]){
swap(array,i,j);
}
}
}
}
/**
* 快速排序
* @param array
* @param start
* @param end
*/
public static void quickSort(int array[],int start,int end){
if(start >= end){
return;
}
int flag = array[start];
int i = start,j = end;
while(i < j){
while(i<j && array[j]>=flag){
j--;
}
array[i] = array[j];
while(i<j && array[i]<=flag){
i++;
}
array[j] = array[i];
}
array[i] = flag;
quickSort(array,start,i-1);
quickSort(array,i+1,end);
}
/**
* 合并数组
* @param array
* @param s1
* @param e1
* @param s2
* @param e2
*/
public static void subMergSort(int array[],int s1,int e1,int s2,int e2){
int temp[] = new int[array.length];
int start=s1,end=e2;
int index = s1;
while(s1<=e1 && s2<=e2){
if(array[s1] > array[s2]){
temp[index++] = array[s2++];
}else{
temp[index++] = array[s1++];
}
}
while(s1 <= e1){
temp[index++] = array[s1++];
}
while(s2 <= e2){
temp[index++] = array[s2++];
}
for(int i=start;i<=end;i++){
array[i] = temp[i];
}
print(array);
temp = null;
}
/**
* 归并排序
* @param array
* @param start
* @param end
*/
public static void mergeSort(int array[],int start,int end){
if(start >= end){
return;
}
int mid = (start+end)/2;
mergeSort(array,start,mid);
mergeSort(array,mid+1,end);
subMergSort(array,start,mid,mid+1,end);
}
public static void print(int array[]){
for(int i=0;i<array.length;i++){
System.out.print(array[i] + " ");
}
System.out.println();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int array[] = new int[]{8,7,6,5,4,3,2,1};
//directInsertSort(array,0,array.length-1);
//bubbleSort(array,array.length);
//selectSort(array,array.length);
//quickSort(array,0,array.length-1);
//subMergSort(array,0,3,4,7);
mergeSort(array,0,7);
print(array);
}
}