最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)6種字符串數(shù)組的排序(String array sort)

 更新時間:2020年01月14日 09:57:30   作者:昕友軟件開發(fā)  
這篇文章主要介紹了java實現(xiàn)6種字符串數(shù)組的排序(String array sort),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

方法分別是:

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

時間復雜度:

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

本文中使用的例子是一個5757行的隨機字符串數(shù)組文本TXT,實際測試結果:

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

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

  • 低位優(yōu)先鍵索引排序
  • 高位優(yōu)先建索引排序
  • 歸并排序(Java自帶的排序算法),速度還行,關鍵是保持循環(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);      //遞歸調用
    }
    if(ltemp<right) 
    {
      quickSort(arr,rtemp+1,right);      //遞歸調用
    }
  }

三向快速:

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());
    } 
  }

運行多次結果相近:

低位優(yōu)先鍵索引排序:8 ms
高位優(yōu)先鍵索引排序:10 ms
JAVA自帶排序:15 ms
冒泡排序:315 ms
快速排序:9 ms
三向快速排序:13 ms

 用到的數(shù)據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》

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • mybatis-plus?插入修改配置默認值的實現(xiàn)方式

    mybatis-plus?插入修改配置默認值的實現(xiàn)方式

    這篇文章主要介紹了mybatis-plus?插入修改配置默認值的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 實現(xiàn)Java刪除一個集合的多個元素

    實現(xiàn)Java刪除一個集合的多個元素

    Java中的For each實際上使用的是iterator進行處理的。而iterator是不允許集合在iterator使用期間刪除的。而我在for each時,從集合中刪除了一個元素,這導致了iterator拋出了ConcurrentModificationException,下面來看看到底怎么回事。
    2016-08-08
  • spring boot自定義404錯誤信息的方法示例

    spring boot自定義404錯誤信息的方法示例

    這篇文章主要介紹了spring boot自定義404錯誤信息的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-09-09
  • SpringBoot+Dubbo+Zookeeper實現(xiàn)簡單分布式開發(fā)的應用詳解

    SpringBoot+Dubbo+Zookeeper實現(xiàn)簡單分布式開發(fā)的應用詳解

    這篇文章主要介紹了SpringBoot+Dubbo+Zookeeper實現(xiàn)簡單分布式開發(fā)的應用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Java自定義Spring配置標簽

    Java自定義Spring配置標簽

    這篇文章主要介紹了Java自定義Spring配置標簽,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-08-08
  • Java開發(fā)實例之圖書管理系統(tǒng)的實現(xiàn)

    Java開發(fā)實例之圖書管理系統(tǒng)的實現(xiàn)

    圖書管理的功能大體包括:增加書籍、借閱書籍、刪除書籍、查看書籍列表、退出系統(tǒng)、查找書籍、返還書籍這些,本文主要給大家介紹該系統(tǒng)的數(shù)據庫語句,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • Java并發(fā)系列之CyclicBarrier源碼分析

    Java并發(fā)系列之CyclicBarrier源碼分析

    這篇文章主要為大家詳細分析了Java并發(fā)系列之CyclicBarrier源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 解讀JDK8踩坑JCE加密限制版本問題

    解讀JDK8踩坑JCE加密限制版本問題

    這篇文章主要介紹了JDK8踩坑JCE加密限制版本問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • idea搭建ssh框架的超詳細教程

    idea搭建ssh框架的超詳細教程

    這篇文章主要介紹了idea搭建ssh框架的超詳細教程,本文通過圖文實例代碼相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • Spring中@Controller和@RestController的區(qū)別詳解

    Spring中@Controller和@RestController的區(qū)別詳解

    這篇文章主要介紹了Spring中@Controller和@RestController的區(qū)別詳解,@RestController?是?@Controller?和?@ResponseBody?的結合體,單獨使用?@RestController?的效果與?@Controller?和?@ResponseBody?二者同時使用的效果相同,需要的朋友可以參考下
    2023-10-10

最新評論

新绛县| 洛扎县| 石狮市| 新竹市| 潼南县| 巢湖市| 昌黎县| 达尔| 高碑店市| 衡阳市| 临泽县| 文山县| 仪陇县| 商南县| 宜城市| 兰西县| 丰都县| 青州市| 河北省| 平邑县| 友谊县| 阜新市| 长泰县| 宜丰县| 江达县| 屯留县| 永新县| 嵊州市| 长沙市| 灵川县| 旬邑县| 砚山县| 来凤县| 台山市| 桐庐县| 荔波县| 奉节县| 定日县| 长兴县| 井冈山市| 广灵县|