欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java實(shí)現(xiàn)6種字符串?dāng)?shù)組的排序(Stringarraysort)

注意,本文不是字符串排序,是字符串?dāng)?shù)組的排序。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供建安網(wǎng)站建設(shè)、建安做網(wǎng)站、建安網(wǎng)站設(shè)計(jì)、建安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、建安企業(yè)網(wǎng)站模板建站服務(wù),十年建安做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

方法分別是:

1、低位優(yōu)先鍵索引排序
2、高位優(yōu)先建索引排序
3、Java自帶排序(經(jīng)過(guò)調(diào)優(yōu)的歸并排序)
4、冒泡排序
5、快速排序
6、三向快速排序

時(shí)間復(fù)雜度:

  • 最慢的肯定是冒泡,O(n的平方)
  • 最快的是快速排序,平均 O(nlogn)
  • 低位優(yōu)先,O(nW),W是字符串長(zhǎng)度,在字符串長(zhǎng)度較短情況下和快速排序時(shí)間應(yīng)該很接近
  • 高位優(yōu)先,O(n) - O(nW)
  • 三向快速排序,O(n) - O(nW)

本文中使用的例子是一個(gè)5757行的隨機(jī)字符串?dāng)?shù)組文本TXT,實(shí)際測(cè)試結(jié)果:

  • 低位優(yōu)先鍵索引排序:5 ms
  • 高位優(yōu)先鍵索引排序:8 ms
  • JAVA自帶排序:9 ms
  • 冒泡排序:284 ms
  • 快速排序:8 ms
  • 三向快速排序:12 ms

穩(wěn)定的排序是:

  • 低位優(yōu)先鍵索引排序
  • 高位優(yōu)先建索引排序
  • 歸并排序(Java自帶的排序算法),速度還行,關(guān)鍵是保持循環(huán)情況下的順序穩(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

驗(yàn)證代碼:

public static void main(String[] args) {
    URL path = SortWords.class.getResource("");    
    //不定長(zhǎng)隨機(jī)單詞1000個(gè)
    //File file = new File(path.getPath()+"/1000words.txt");
    //長(zhǎng)度為5的單詞,5757個(gè)
    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());
    } 
  }

運(yùn)行多次結(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》

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

分享題目:java實(shí)現(xiàn)6種字符串?dāng)?shù)組的排序(Stringarraysort)
瀏覽地址:http://chinadenli.net/article48/gphhep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站排名虛擬主機(jī)、網(wǎng)站內(nèi)鏈、自適應(yīng)網(wǎng)站品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
亚洲一区精品二人人爽久久| 国产在线成人免费高清观看av| 国产福利一区二区久久| 日韩日韩日韩日韩在线| 国产一区二区三区四区免费| 久久三级国外久久久三级| 九九视频通过这里有精品| 国产欧美日韩精品自拍| 国产日韩精品激情在线观看| 日本精品免费在线观看| 国产精品激情对白一区二区| 91精品国产综合久久精品| 欧洲亚洲精品自拍偷拍| 不卡中文字幕在线免费看| 99久久精品免费看国产高清| 高清一区二区三区大伊香蕉| 国产免费无遮挡精品视频 | 护士又紧又深又湿又爽的视频| 又大又紧又硬又湿又爽又猛| 国产色一区二区三区精品视频| 欧美日不卡无在线一区| 麻豆91成人国产在线观看| 国产一级特黄在线观看| 激情视频在线视频在线视频| 99国产成人免费一区二区| 国产精品久久三级精品| 亚洲一区二区三区福利视频| 日韩一区二区三区在线日| 69精品一区二区蜜桃视频| 亚洲国产av国产av| 91亚洲精品亚洲国产| 东京不热免费观看日本| 欧美野外在线刺激在线观看| 日韩精品毛片视频免费看| 草草视频福利在线观看| 伊人色综合久久伊人婷婷| 亚洲熟女少妇精品一区二区三区| 免费人妻精品一区二区三区久久久 | 日本高清一区免费不卡| 国产一区二区三区av在线| 日本亚洲精品在线观看|