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

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

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

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

方法分別是:

1、低位優(yōu)先鍵索引排序
2、高位優(yōu)先建索引排序
3、Java自帶排序(經(jīng)過調(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

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

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

    spring boot自定義404錯(cuò)誤信息的方法示例

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

    SpringBoot+Dubbo+Zookeeper實(shí)現(xiàn)簡(jiǎn)單分布式開發(fā)的應(yīng)用詳解

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

    Java自定義Spring配置標(biāo)簽

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

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

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

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

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

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

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

    idea搭建ssh框架的超詳細(xì)教程

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

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

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

最新評(píng)論

天峻县| 镇原县| 遂溪县| 安顺市| 随州市| 灵川县| 辽中县| 三门县| 古浪县| 五大连池市| 泸水县| 石柱| 翁牛特旗| 唐河县| 青岛市| 东莞市| 民县| 波密县| 齐齐哈尔市| 屏山县| 沙雅县| 渝中区| 九台市| 都安| 双牌县| 连云港市| 清苑县| 宜州市| 孟州市| 宝坻区| 普安县| 土默特右旗| 明水县| 黄大仙区| 巴塘县| 双鸭山市| 荔波县| 汝城县| 环江| 抚顺县| 文登市|