常见的排序算法实现

public class Sort {
	//插入排序
    public static void InsertSort(int []array){
    	for(int i=1;i<array.length;i++){
    		int temp = array[i];
    		int j = i-1;
    		while(j>=0 && array[j]>temp){
    			array[j+1]=array[j];
    			j--;
    		}
    		array[j+1]=temp;
    	}
    }
    //Shell排序,当distant==1时。看似是普通的插入排序,但是实际上的复杂度却很小,因为此时已经差不多排好序了,需要数字挪位的情况不多
    public static void ShellSort(int []array){
    	int distant = array.length/2;
    	while(distant>=1){
    		for(int i =0;i<distant;i++){
    			for(int j=i+distant;j<array.length;j+=distant){
    				int temp=array[j];
    				int k=j;
    				while(k>i&&temp<array[k-distant]){
    					array[k]=array[k-distant];
    					k-=distant;
    				}
    				array[k]=temp;
    			}
    		}
    		distant/=2;
    	}
    }
    //冒泡排序
    public static void BubbleSort(int []array){
    	for(int i=0;i<array.length-1;i++){
    		for(int j=0;j<array.length-i-1;j++){
    			if(array[j]>array[j+1]){
    				int temp = array[j];
    				array[j]=array[j+1];
    				array[j+1]=temp;
    			}
    		}
    	}
    }
    //快速排序
    public static void QuickSort(int []array,int left,int right){
    	if(left>=right){
    		return ;
    	}
    	int key = Partition(array,left,right);
    	QuickSort(array,left,key-1);
    	QuickSort(array,key+1,right);
    }
    public static int Partition(int []array,int left,int right){
    	int key = array[left];
    	while(left<right){
    		while(left<right&&key<=array[right]){
    			right--;
    		}
    		array[left]=array[right];
    		while(left<right&&key>=array[left]){
    			left++;
    		}
    		array[right]=array[left];
    	}
    	array[left]=key;
    	return left;
    }
    //选择排序
    public static void SelectSort(int []array){
    	for(int i=0;i<array.length-1;i++){
    		int min = i;
    		for(int j=i+1;j<array.length;j++){
    			if(array[min]>array[j]){
    				min=j;
    			}
    		}
    		if(min!=i){
    			int temp = array[min];
    			array[min] = array[i];
    			array[i] = temp;
    		}
    	}
    }
    //堆排序
    public static void HeapSort(int []array){
    	for(int i=array.length-1;i>=0;i--){
    		BuildHeap(array,i);
    		int temp = array[i];
    		array[i]=array[0];
    		array[0] = temp;
    	}
    }
    public static void BuildHeap(int []array,int n){//建立最大堆
    	for(int i=(n-1)/2;i>=0;i--){
    		SiftDown(array,i,n);
    	}
    }
    public static void SiftDown(int []array,int i,int n){//调整以i为节点的为最大堆
    	int left =  i*2+1;
    	int right = i*2+2;
    	int max = i;
    	if(left<=n &&array[max]<array[left]){
    		max = left;
    	}
    	if(right<=n &&array[max]<array[right]){
    		max = right;
    	}
    	if(max!=i){
    		int temp = array[max];
    		array[max] = array[i];
    		array[i] = temp;
    		SiftDown(array,max,n);
    	}
    }  
    //归并排序
    public static void MergeSort(int []array){
    	Merge_sort(array,0,array.length-1);
    }
    public static void Merge_sort(int []array,int start,int end){
    	if(start>=end){
    		return ;
    	}
    	int mid = (start+end)/2;
    	Merge_sort(array,start,mid);
    	Merge_sort(array,mid+1,end);
    	Merge(array,start,end);
    }
    public static void Merge(int array[],int start,int end){
    	int mid =(start+end)/2;
    	int rstart = mid+1;
    	int []temp = new int[end-start+1];
    	int index=0;
    	while(start<=mid&&rstart<=end){
    		if(array[start]<array[rstart]){
    			temp[index++] =  array[start++];
    		}else{
    			temp[index++] = array[rstart++];
    		}
    	}
    	while(start<=mid){
    		temp[index++]=array[start++];
    	}
    	while(rstart<=end){
    		temp[index++]=array[rstart++];
    	}
    	for(int i=0;i<temp.length;i++){
    		array[end-i] = temp[temp.length-1-i];
    	}
    }
    //输出函数
    public static void Output(int array[]){
    	for(int i:array){
        	System.out.print(i+"  ");                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
        }
    	System.out.println();
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        int []array1 = {4,3,8,6,1,9,10,35,87,2};
        InsertSort(array1);
        Output(array1);
        int []array2 = {4,3,8,6,1,9,10,35,87,2};
        BubbleSort(array2);
        Output(array2);
        int []array3 = {4,3,8,6,1,9,10,35,87,2};
        QuickSort(array3,0,array3.length-1);
        Output(array3);
        int []array4 = {4,3,8,6,1,9,10,35,87,2};
        SelectSort(array4);
        Output(array4);
        int []array5 = {4,3,8,6,1,9,10,35,87,2};
        HeapSort(array5);
        Output(array5);
        int []array6 = {4,3,8,6,1,9,10,35,87,2};
        ShellSort(array6);
        Output(array6);
		int []array7 = {4,3,8,6,1,9,10,35,87,2};
        MergeSort(array7);
        Output(array7);
	}
}

猜你喜欢

转载自blog.csdn.net/shl_shl/article/details/71023196