Rumah > Soal Jawab > teks badan
如题java.util.Arrays.sort(int[] a)
数组形参传递为啥能修改原始数组的内容?
[public static void sort(int[] a)](http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#sort(int[]))
Sorts the specified array into ascending numerical order.
Implementation note: The sorting algorithm is a Dual-Pivot Quicksort by Vladimir Yaroslavskiy, Jon Bentley, and Joshua Bloch. This algorithm offers O(n log(n)) performance on many data sets that cause other quicksorts to degrade to quadratic performance, and is typically faster than traditional (one-pivot) Quicksort implementations.
Parameters:a - the array to be sorted
迷茫2017-04-18 09:08:24
1. Untuk int[] a, pembolehubah a ialah rujukan objek, yang boleh difahami sebagai menyimpan alamat objek tatasusunan dalam timbunan (elemen tertentu dalam tatasusunan disimpan dalam timbunan
2). . sort() Nilai rujukan pembolehubah a dihantar masuk, iaitu nilai alamat tatasusunan dalam timbunan yang disebut dalam 1. Menggunakan nilai a, sudah tentu, anda boleh mengakses tatasusunan dalam timbunan, dan kemudian program boleh mengubah suai nilai dan susunan elemen dalam tatasusunan.
巴扎黑2017-04-18 09:08:24
Oleh kerana salinan alamat tatasusunan asal dihantar, nilai tatasusunan asal boleh ditukar.
高洛峰2017-04-18 09:08:24
Untuk menjawab soalan anda, pergi ke kod sumber Ia menggunakan kaedah DualPivotQuicksort.sort( Klik pada kaedah ini:
static void sort(int[] a, int left, int right, int[] work, int workBase, int workLen)
Int[]work sementara tatasusunan digunakan untuk menyimpan data semasa proses pengisihan Selepas mengisih, kandungan tatasusunan asal int[]a pasti akan ditukar.
Selain itu, mengenai kaedah Arrays.sort(), terdapat arahan berikut:
1. Isih semua jenis disediakan dalam Tatasusunan Java. Ia terutamanya dibahagikan kepada dua kategori: 8 jenis data asas dan Objek.
2.Java menggunakan pengisihan pantas untuk tatasusunan Primitif (int, float dan data prototaip lain) dan pengisihan gabungan untuk tatasusunan Objek. Apabila ia datang untuk menyusun objek, kestabilan adalah penting. Sebagai contoh, transkrip mungkin telah disusun mengikut nombor pelajar pada mulanya Sekarang mari kita susun mengikut gred Kemudian anda harus memastikan bahawa Zhang San pada asalnya di hadapan Li Si walaupun gred mereka adalah sama tidak boleh pergi ke Li Si Pergi di belakang empat. Dan jenis cepat tidak stabil. Apa yang disimpan dalam tatasusunan objek hanyalah rujukan objek, jadi berbilang anjakan tidak akan menyebabkan overhed tambahan Walau bagaimanapun, tatasusunan objek secara amnya sensitif kepada bilangan perbandingan daripada perbandingan nombor mudah. Isih Gabung melakukan kerja yang lebih baik daripada isihan pantas dalam hal ini, yang merupakan salah satu sebab penting untuk memilihnya sebagai isihan objek.
3. Pengoptimuman pengisihan: Dalam pelaksanaan, pengisihan cepat dan cantuman adalah rekursif Di bahagian bawah rekursi, iaitu apabila panjang tatasusunan yang akan diisih kurang daripada 7, pengisihan gelembung digunakan secara langsung. secara rekursif. Analisis: Jumlah bilangan perbandingan untuk pengisihan gelembung tatasusunan dengan panjang 6 adalah paling banyak 1+2+3+4+5+6=21, dan dalam kes terbaik hanya terdapat 6 perbandingan. Isih cepat atau gabungan melibatkan overhed panggilan rekursif, dsb., dan kecekapan masanya menjadi lebih merugikan apabila n adalah kecil Oleh itu, isihan gelembung digunakan di sini, yang juga merupakan pengoptimuman yang sangat penting untuk isihan pantas.
4. Isih pantas dalam kod sumber terutamanya mengoptimumkan aspek berikut Apabila bilangan elemen dalam tatasusunan yang akan diisih adalah kecil, ambang dalam kod sumber ialah 7, dan isihan sisipan digunakan. Walaupun kerumitan masa isihan sisipan ialah 0(n^2), apabila unsur tatasusunan adalah kecil, isihan sisipan adalah lebih baik daripada isihan pantas, kerana operasi rekursif isihan pantas menjejaskan prestasi. Pilihan yang lebih baik ialah elemen pembahagi (elemen asas). Mampu membahagikan tatasusunan kepada kira-kira dua bahagian yang sama mengelakkan senario terburuk. Sebagai contoh, apabila tatasusunan disusun, memilih elemen pertama sebagai elemen pembahagi akan menjadikan kerumitan masa algoritma mencapai O(n^2).
大家讲道理2017-04-18 09:08:24
Apa yang diubah suai ialah nilai rujukan, iaitu int[] a, nilai yang ditunjuk oleh a,