【Java】文字列の文字を並べ替え、ASCII表の順に小さいものから大きいものへ

12213 ワード

文字列の文字をASCIIテーブルの順に小さい順から大きい順に並べ替えます.たとえば、文字列「asdafxcvMADb」を「ADMaabcdfsvx」に並べ替えます.
アルゴリズムの基本思想:まず文字列をcharタイプの配列に変換して格納する(Javaの文字列はC++のように配列格納を直接使用しないため).その後、char配列の内容を集計ソートの方法に従って、小さいものから大きいものにソートします.集計ソートは安定なソートアルゴリズムであり,アルゴリズムの時間的複雑さをO(nlgn)に向上させることができる.
くだらないことは言わないで、直接コードをつけます.
public class Demo {
    public static void main(String[] args){
        Demo demo=new Demo();
        String string="asdafxcvMADb";
        demo.sortByASCII(string);
    }

    public void sortByASCII(String str){
        char []array=str.toCharArray();   //                char  
        sort(array);
        for(char s:array)          //  
            System.out.print(s);
    }

    public static void sort(char []arr){
        char []temp = new char[arr.length];    //    ,                   ,           
        sort(arr,0,arr.length-1,temp);
    }
    private static void sort(char[] arr,int left,int right,char []temp){
        if(left<right){
            int mid = (left+right)/2;
            //     
            sort(arr,left,mid,temp);        //      ,        
            sort(arr,mid+1,right,temp);//      ,        
            merge(arr,left,mid,right,temp);//            
        }
    }
    private static void merge(char[] arr,int left,int mid,int right,char[] temp){
        int i = left;          //     
        int j = mid+1;        //     
        int t = 0;           //      
        while (i<=mid && j<=right){
            if(arr[i]<=arr[j])
                temp[t++] = arr[i++];
            else
                temp[t++] = arr[j++];
        }
        while(i<=mid){               //          temp 
            temp[t++] = arr[i++];
        }
        while(j<=right){            //           temp 
            temp[t++] = arr[j++];
        }
        t = 0;
        // temp             
        while(left <= right){
            arr[left++] = temp[t++];
        }
    }
}


コードの注釈もはっきりしているので、ここでもあまり言いません.