【Java】文字列の文字を並べ替え、ASCII表の順に小さいものから大きいものへ
12213 ワード
文字列の文字をASCIIテーブルの順に小さい順から大きい順に並べ替えます.たとえば、文字列「asdafxcvMADb」を「ADMaabcdfsvx」に並べ替えます.
アルゴリズムの基本思想:まず文字列をcharタイプの配列に変換して格納する(Javaの文字列はC++のように配列格納を直接使用しないため).その後、char配列の内容を集計ソートの方法に従って、小さいものから大きいものにソートします.集計ソートは安定なソートアルゴリズムであり,アルゴリズムの時間的複雑さをO(nlgn)に向上させることができる.
くだらないことは言わないで、直接コードをつけます.
コードの注釈もはっきりしているので、ここでもあまり言いません.
アルゴリズムの基本思想:まず文字列を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++];
}
}
}
コードの注釈もはっきりしているので、ここでもあまり言いません.