1. 程式人生 > >Java中Arrays類進行陣列排序

Java中Arrays類進行陣列排序

Java中Arrays類實際是一個實現對陣列操作的各種方法的類,可以實現對陣列的排序和搜尋,陣列的比較和對陣列增加元素,陣列的拷貝和資料轉換為字串的功能。今天我們就來說說Arrays.sort()對陣列進行排序的規則。

1.對基本型別的陣列進行排序

(1)Arrays類中的sort()使用的是經過調優的快速排序演算法;

(2)對於int[],double[],char[]等基本資料型別的陣列,Arrays類只提供了預設的升序排列,並沒有提供相應的降序排列方法;

       陣列排序函式原型:

       static void sort(int[] a)  對指定的int型陣列按數字升序進行排序

       static void sort (int[] a,int fromIndex,int toIndex)  對指定int型陣列的指定範圍按數字升序進行排序

例如:

   

輸出結果:


Arrays.sort()底層實現採用了快速排序。快速排序的思想是:首先選取一個基準,這個基準可以是第一個數字也可以是任意數值,然後用兩個指標left和right分別指向所要排序的陣列的0號位置和length-1號位置,在保證left<right的前提下,先從後向前遍歷尋找第一個小於該基準的數字,進而與left位置的數字進行交換,接下來再從前向後遍歷尋找第一個大於該基準的數字,進而與right所指向的位置的數字進行交換,以此類推,一次遍歷下來我們將會的到一個在基準左邊都是小於基準的數字,在基準右邊都是大於基準的數字。快速排序在一般情況下它的時間複雜度為O(n*logn),但是在我們輸入一組完全有序或者基本有序的陣列的情況下,快速排序演算法將退換為氣泡排序演算法,時間複雜度會變味O(n^2),這種情況也是可以改變的,當我們在選取基準時,我們可以採用三位取中法,即在arr[left],arr[(left+right)/2],arr[right]三者中取中間值作為基準,這樣會避免我們在最壞情況下快速排序演算法效能的降低。

2.對複合資料型別的資料的排序

  函式原型:

    public static<T> void sort(T[] a,Comparator c)   根據指定比較器產生的順序對指定物件陣列進行排序

    public static<T> void sort(T[] a,int fromIndex,int toIndex,Comparator c)   根據指定比較器產生的順序對指定物件陣列的指定範圍進行排序

    這兩個排序演算法是經過調優的歸併排序演算法

 例如:


輸出結果:


既然這裡用到了Comparator比較器物件,那我們就來說說Java中的兩種比較器Comparable和Comparator

區別:①Comparable位於java.lang包下,Comparator位於java.util包下;

           ②實現Comparable介面要重寫ComparetTo()方法,實現Comparator介面需要重寫compare()方法;

           ③Comparable介面將比較程式碼嵌入需要進行比較的類的自身程式碼中,Comparator介面要在一個單獨的類中實現比較;

           ④如果前期類設計沒有考慮到類的比較問題而沒有實現Comparable介面,後期可以通過Comparator介面來實現演算法進行排序;

           ⑤Comparable介面強制進行自然排序,Comparator介面不強制自然排序,可以指定排序

相關推薦

JavaArrays進行陣列排序

Java中Arrays類實際是一個實現對陣列操作的各種方法的類,可以實現對陣列的排序和搜尋,陣列的比較和對陣列增加元素,陣列的拷貝和資料轉換為字串的功能。今天我們就來說說Arrays.sort()對陣列進行排序的規則。 1.對基本型別的陣列進行排序 (1)Arrays類中的

Java Arrays進行陣列排序

Java API對Arrays類的說明是:此類包含用來運算元組(比如排序和搜尋)的各種方法。 1.對基本資料型別的陣列的排序    說明:(1)Arrays類中的sort()使用的是“經過調優的快速排序法”;       (2)比如int[],double[],char

使用Java Arrays進行陣列排序

排序演算法,基本的高階語言都有一些提供。C語言有qsort()函式,C++有sort()函式,java語言有Arrays類(不是Array)。用這些排序時,都可以寫自己的排序規則。 Java API對Arrays類的說明是:此類包含用來運算元組(比如排序和搜尋)的各種方法。

javaArrays,binarySearch()方法的返回值問題

.cn pac rom 第一個 mage sea div arch x11 最近在復習Java知識,發現果然不經常使用忘得非常快。。。 看到binarySearch()方法的使用時,發現書上有點錯誤,於是就自己上機實驗了一下,最後總結一下該方法的返回值。 總結:bina

java使用TreeMap進行中文排序

最近遇到需要按一個model中不同的列進行排序的問題,查了一下JDK API文件,發現,java中可以排序的工具類和介面共有五個SortedMap 、SortedSet、TreeMap 、TreeSet和Collections,由於我要排序的是一系列model,所以

JavaArrays的binarySearch方法詳解

1.它有很多過載的方法: static int 使用二分搜尋法來搜尋指定的 byte 型陣列,以獲得指定的值。 static int (byte[] a, int fromIndex, int toIndex, byte key) 使用二分搜尋法來搜尋指定的 byte

javaArrays的簡單使用

轉載原文:http://blog.csdn.net/object_allen/article/details/41695425 java.util.Arrays類能方便地運算元組,它提供的所有方法都是靜態的。具有以下功能: ² 給陣列賦值:通過fill方法。 ² 

javaArrays的一些用法

列舉Arrays的一些用法,方便以後查詢使用。 //1.sort排序String[]陣列:升序:從小到大 String[] names = { "Liz", "John", "Eric", "Alan" }; //只排序前兩個 //[John, Liz, Er

JavaArrays與Math

for 數組 四舍五入 ont util ring new === 數組排序 Arrays(數組工具類)   Java中已經封裝好的類,提供大量靜態方法供用戶對數組的使用。   導包:import java.util.Arrays   1.Arrays.toStrin

Java Arrays進行數組排序

character nor ace false cnblogs 基本類 rgb span pre 1.對基本數據類型的數組的排序   說明:(1)Arrays類中的sort()使用的是“經過調優的快速排序法”;      (2)比如int[],double[],char[]

JavaArrays.sort()自定義陣列的升序和降序排序

Java學習中會遇到對陣列進行升序或者降序排序的問題 Java語言提供給我們Array.sort(int [] arr)對陣列進行升序排列 import java.util.Arrays; public class Test1 { public stat

JAVAArrays.sort()使用兩種方式(Comparable和Comparator介面)對物件或者引用進行排序

package com.dt.Sort; import java.util.Arrays; import java.util.Comparator; /**  * 使用Comparator介面:編寫多個排序方式類實現Comparator介面,並重寫新Comparator介面中的compare()方法 pub

陣列排序 java.util.Arrays的sort方法

陣列排序: java.util.Arrays類的sort方法可以對 基本型別陣列 和 Comparable型別陣列進行排序. java2核心技術裡沒提到可以對基本型別排序,今天特試了一下. 支援的, 記錄一下. import java.util.*;public class EmployeeSortTes

Java陣列操作 java.util.Arrays 常用方法的使用

任何一門程式語言,陣列都是最重要和常用的資料結構之一,但不同的語言對陣列的構造與處理是不盡相同的。 Java中提供了java.util.Arrays 類能方便地運算元組,並且它提供的所有方法都是靜態的。下面介紹一下Arrays類最常用的幾個方法。 1.  陣列排序 Arrays工具類提供了一個sor

javaRandomAccessFile的作用:對指定文件可以進行讀寫的操作

cnblogs 讀寫 acc com ces 作用 分享 進行 .com 在java中RandomAccessFile類的作用:對指定文件可以進行讀寫的操作

Java 013 StringBufferArrays(常見排序)、包裝(Integer

知識點梳理 心得體會 小知識點 1.執行緒安全與不安全 概念:程式碼所在的程序中有多個執行緒在同時執行,而這些執行緒可能會同時執行這段程式碼。如果每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。執行緒安全的程式,多程序需要訪

JavaArrays.toString ()列印二維陣列及Array陣列的常用操作

1.Java中Arrays.toString () 已知列印一維陣列的API為System.out.println ( Arrays.toString ();,其引數為陣列名或陣列指標,其支援的資料型別有很多,如:int[]、char[]、byte[]等。 import java

設計一個包含一個interface,三個class的Java 程式,用於完成陣列排序排序任務。其中interface包含一個sort() 方法。第一個class使用氣泡排序法實現interface的

題目:設計一個包含一個interface,三個class的Java 程式,用於完成陣列排序排序任務。其中interface中包含一個sort() 方法。第一個class使用氣泡排序法實現interface的sort()方法;第二個class使用選擇排序法實現interface的sort()方法;

JavaClass兩個值得注意的進行型別動態轉換的方法

Java中的Class類有兩個重要的方法:cast()和asSubclass()。這兩個方法都是用於Class類進行執行時(run-time)階段的型別轉換的。下面來看看他們的定義和使用: 第一個方法asSubclass() public <U> Clas

java對ArrayList進行排序

java中的ArrayList需要通過collections類的sort方法來進行排序 如果想自定義排序方式則需要有類來實現Comparator介面並重寫compare方法 呼叫sort方法時將ArrayList物件與實現Commparator介面的類的物件