java實現常見的各種排序算法

    以下是我用java實現各種常見的排序算法

package com.husiwang.Sort; 
 
 
/** 
 * Created by SiwangHu on 2015/2/6. 
 */ 
public class Sort { 
    private int[] Data;      //數據緩存 
    private Visit Visited;   //回調函數 
     
    public Sort(){ 
        Data=null; 
        Visited=new Visit(); 
    } 
     
    public Sort(int[] data){ 
        Data=new int[data.length]; 
        for (int i = 0; i <data.length ; i++) { 
            Data[i]=data[i]; 
        } 
        Visited=new Visit(); 
    } 
 
    public void InitData(int[] data){ 
        Data=new int[data.length]; 
        for (int i = 0; i <data.length ; i++) { 
            Data[i]=data[i]; 
        } 
    } 
 
    public void InsertSort(){ 
        if(Data!=null){ 
            for(int i=0;i<Data.length;i++){ 
                int temp=Data[i]; 
                for(int j=i;j>-1;j--){ 
                    if(temp<Data[j]){ 
                        Data[j+1]=Data[j]; 
                        Data[j]=temp; 
                    } 
                } 
            } 
        } 
    } 
 
    public void SelectSort(){ 
        if(Data!=null){ 
            for(int i=0;i<Data.length;i++){ 
                for(int j=i;j<Data.length;j++){ 
                    if(Data[i]>Data[j]){ 
                        int temp=Data[j]; 
                        Data[j]=Data[i]; 
                        Data[i]=temp; 
                    } 
                } 
            } 
        } 
    } 
 
    public void BubbleSort(){ 
        if(Data!=null){ 
            for(int i=0;i<Data.length;i++){ 
                for(int j=1;j<Data.length-i;j++){ 
                    if(Data[j-1]>Data[j]){ 
                        int temp=Data[j-1]; 
                        Data[j-1]=Data[j]; 
                        Data[j]=temp; 
                    } 
                } 
            } 
        } 
    } 
 
    public void ShellSort(int[] dk){ 
        for(int i=0;i<dk.length;i++){ 
            shellSort(dk[i]); 
        } 
    } 
 
    private void shellSort(int dk){ 
        if(Data!=null){ 
            for(int i=0;i<Data.length;i+=dk){ 
                int temp=Data[i]; 
                for(int j=i;j>-1;j-=dk){ 
                    if(temp<Data[j]){ 
                        Data[j+dk]=Data[j]; 
                        Data[j]=temp; 
                    } 
                } 
            } 
        } 
    } 
 
    public void QuickSort(){ 
        quickSort(0, Data.length-1); 
    } 
 
    private void quickSort(int begin,int end){ 
        if(begin<end) { 
            int mid = Handle(begin, end); 
            quickSort(0, mid-1); 
            quickSort(mid + 1, end); 
        } 
    } 
 
    private int Handle(int begin,int end) { 
        int Begin = begin, End = end, key = Data[begin], temp; 
        while (Begin < End) { 
            while (Begin < End && Data[End] >= key) { 
                End--; 
            } 
            temp = Data[Begin]; 
            Data[Begin] = Data[End]; 
            Data[End] = temp; 
            while (Begin < End && Data[Begin] <= key) { 
                Begin++; 
            } 
            temp = Data[Begin]; 
            Data[Begin] = Data[End]; 
            Data[End] = temp; 
        } 
        return Begin; 
    } 
 
    public void MergeSort(){ 
        mergeSort(0,Data.length-1); 
    } 
 
    private void mergeSort(int begin,int end){ 
        if(begin<end){ 
            int mid=(begin+end)/2; 
            mergeSort(begin,mid); 
            mergeSort(mid+1,end); 
            Merge(begin,mid,end); 
        } 
    } 
 
    private void Merge(int begin,int mid,int end){ 
        int[] Temp=new int[Data.length]; 
        int index=begin,center=mid+1,temp=begin; 
        while(begin<=mid&&center<=end){ 
            if(Data[begin]<Data[center]){ 
                Temp[index]=Data[begin]; 
                begin++; 
                index++; 
            } 
            else{ 
                Temp[index]=Data[center]; 
                center++; 
                index++; 
            } 
        } 
        while(begin<=mid){ 
            Temp[index]=Data[begin]; 
            begin++; 
            index++; 
        } 
        while (center<=end){ 
            Temp[index]=Data[center]; 
            center++; 
            index++; 
        } 
        while(temp<=end){ 
            Data[temp]=Temp[temp]; 
            temp++; 
        } 
    } 
 
    public void HeapSort(){ 
        int swap; 
        for(int i=Data.length-1;i>0;i--){ 
            HeapAdjust(0, i); 
            swap=Data[i]; 
            Data[i]=Data[0]; 
            Data[0]=swap; 
        } 
    } 
 
 
    private void HeapAdjust(int begin,int end){ 
        int Begin=(end-1)/2; 
        for(int i=Begin;i>begin-1;i--){ 
            int temp=i,swap; 
            if(Data[temp]<Data[2*i+1]&&2*i+1<=end) 
                temp=2*i+1; 
            if(Data[temp]<Data[2*i+2]&&2*i+2<=end) 
                temp=2*i+2; 
            swap=Data[i]; 
            Data[i]=Data[temp]; 
            Data[temp]=swap; 
        } 
    } 
 
    public int[] getData() { 
        return Data; 
    } 
 
    public void Traverse(){ 
        Traverse(Visited); 
    } 
 
    public void Traverse(Visit visited){ 
        for(int i=0;i<Data.length;i++){ 
            visited.visited(Data[i]); 
        } 
    } 
 
    @Override 
    public String toString() { 
        String temp=""; 
        for (int i = 0; i <Data.length ; i++) { 
            temp+=Data[i]+" "; 
        } 
        return "Sort{" + 
                "Data=" + temp + 
                '}'; 
    } 
}


package com.husiwang.Sort; 
 
/** 
 * Created by SiwangHu on 2015/2/6. 
 */ 
public class Visit { 
    public void visited(int data){ 
        System.out.println(data); 
    } 
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章