注意,本文不是字符串排序,是字符串數(shù)組的排序。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供建安網(wǎng)站建設(shè)、建安做網(wǎng)站、建安網(wǎng)站設(shè)計、建安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、建安企業(yè)網(wǎng)站模板建站服務(wù),十年建安做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
方法分別是:
1、低位優(yōu)先鍵索引排序
2、高位優(yōu)先建索引排序
3、Java自帶排序(經(jīng)過調(diào)優(yōu)的歸并排序)
4、冒泡排序
5、快速排序
6、三向快速排序
時間復雜度:
本文中使用的例子是一個5757行的隨機字符串數(shù)組文本TXT,實際測試結(jié)果:
穩(wěn)定的排序是:
低位優(yōu)先:
public static void sort(String[] a, int w) {
int n = a.length;
int R = 256; // extend ASCII alphabet size
String[] aux = new String[n];
for (int d = w-1; d >= 0; d--) {
int[] count = new int[R+1];
for (int i = 0; i < n; i++)
count[a[i].charAt(d) + 1]++;
for (int r = 0; r < R; r++)
count[r+1] += count[r];
for (int i = 0; i < n; i++)
aux[count[a[i].charAt(d)]++] = a[i];
for (int i = 0; i < n; i++)
a[i] = aux[i];
}
}
高位優(yōu)先:https://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/MSD.java.html
JAVA自帶排序:
Arrays.sort(arr);
冒泡:
public static void bubblingSort(String[] arr) {
int size = arr.length;
for(int i = 0; i<size-1; i++) {
for (int j = i+1; j<arr.length; j++) {
if(arr[i].compareTo(arr[j])>0) {
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
快速:
static void quickSort(String[] arr,int left,int right) //快速排序算法
{
String f,t;
int rtemp,ltemp;
ltemp=left;
rtemp=right;
f=arr[(left+right)/2]; //分界值
while(ltemp<rtemp)
{
while(arr[ltemp].compareTo(f)<0)
{
++ltemp;
}
while(arr[rtemp].compareTo(f)>0)
{
--rtemp;
}
if(ltemp<=rtemp)
{
t=arr[ltemp];
arr[ltemp]=arr[rtemp];
arr[rtemp]=t;
--rtemp;
++ltemp;
}
}
if(ltemp==rtemp)
{
ltemp++;
}
if(left<rtemp)
{
quickSort(arr,left,ltemp-1); //遞歸調(diào)用
}
if(ltemp<right)
{
quickSort(arr,rtemp+1,right); //遞歸調(diào)用
}
}
三向快速:
https://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/Quick3string.java.html
驗證代碼:
public static void main(String[] args) {
URL path = SortWords.class.getResource("");
//不定長隨機單詞1000個
//File file = new File(path.getPath()+"/1000words.txt");
//長度為5的單詞,5757個
File file = new File(path.getPath()+"/words5.txt");
File file1 = new File(path.getPath()+"/words5.txt");
File file2 = new File(path.getPath()+"/words5.txt");
File file3 = new File(path.getPath()+"/words5.txt");
File file4 = new File(path.getPath()+"/words5.txt");
File file5 = new File(path.getPath()+"/words5.txt");
String[] arr = (String[])ReadFiledata.txt2List(file).toArray(new String[0]);
//排序前
for(String s : arr) {
//System.out.println(s.toString());
}
//##############低位優(yōu)先
TimeMillis.setStart();
LSD.sort(arr,5);
TimeMillis.setEnd("低位優(yōu)先鍵索引排序:");
//排序后
for(String s : arr) {
//System.out.println(s.toString());
}
//##############高位優(yōu)先
String[] arr1 = (String[])ReadFiledata.txt2List(file1).toArray(new String[0]);
TimeMillis.setStart();
MSD.sort(arr1);
TimeMillis.setEnd("高位優(yōu)先鍵索引排序:");
//排序后
for(String s : arr1) {
//System.out.println(s.toString());
}
//##############JAVA自帶排序
String[] arr2 = (String[])ReadFiledata.txt2List(file2).toArray(new String[0]);
TimeMillis.setStart();
Arrays.sort(arr2);
TimeMillis.setEnd("JAVA自帶排序:");
//排序后
for(Object s : arr2) {
//System.out.println(s.toString());
}
//##############冒泡排序
String[] arr3 = (String[])ReadFiledata.txt2List(file3).toArray(new String[0]);
TimeMillis.setStart();
bubblingSort(arr3);
TimeMillis.setEnd("冒泡排序:");
//排序后
for(String s : arr3) {
//System.out.println(s.toString());
}
//##############快速排序
String[] arr4 = (String[])ReadFiledata.txt2List(file4).toArray(new String[0]);
TimeMillis.setStart();
quickSort(arr4,0,5756);
TimeMillis.setEnd("快速排序:");
//排序后
for(String s : arr4) {
//System.out.println(s.toString());
}
//##############三向快速排序
String[] arr5 = (String[])ReadFiledata.txt2List(file5).toArray(new String[0]);
TimeMillis.setStart();
Quick3string.sort(arr5);
TimeMillis.setEnd("三向快速排序:");
//排序后
for(String s : arr5) {
//System.out.println(s.toString());
}
}
運行多次結(jié)果相近:
低位優(yōu)先鍵索引排序:8 ms
高位優(yōu)先鍵索引排序:10 ms
JAVA自帶排序:15 ms
冒泡排序:315 ms
快速排序:9 ms
三向快速排序:13 ms
用到的數(shù)據(jù)txt文件下載:
words5_jb51.rar
ReadFiledata幫助類:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
public class ReadFiledata {
public static String txt2String(File file){
StringBuilder result = new StringBuilder();
try{
BufferedReader br = new BufferedReader(new FileReader(file));
String s = null;
while((s = br.readLine())!=null){
result.append(System.lineSeparator()+s);
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return result.toString();
}
public static List<String> txt2List(File file){
try{
BufferedReader br = new BufferedReader(new FileReader(file));
List<String> list = new ArrayList<String>();
String s;
while((s = br.readLine())!=null){
list.add(s);
}
br.close();
return list;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public static Object[] txt2Array(File file){
return txt2List(file).toArray();
}
}參考書目:《算法 4th》
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
分享題目:java實現(xiàn)6種字符串數(shù)組的排序(Stringarraysort)
瀏覽地址:http://chinadenli.net/article48/gphhep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、網(wǎng)站排名、虛擬主機、網(wǎng)站內(nèi)鏈、自適應(yīng)網(wǎng)站、品牌網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)