Kata Pengantar: Ide awal jatuh cinta dengan Java tidak pernah terlupakan: "Berbagi hasil belajar saya, sedalam apa pun teknologi nantinya, yang penting meletakkan dasar yang baik."
Swapper kelas alat, kelas alat ini akan digunakan dalam algoritma selanjutnya:
Copy kode kodenya sebagai berikut:
paket com.meritit.sortord.util;
/**
* Satu utilitas untuk menukar elemen derek Array
*
* @penulis ysjian
* @versi 1.0
* @email [email protected]
* @QQ 646633781
*@telepon 18192235667
* @csdnBlog http://blog.csdn.net/ysjian_pingcx
* @createTime 20-12-2013
* @copyRight Kelebihan
*/
Penukar kelas publik {
penukaran pribadi() {
}
/**
* Tukar elemen derek array
*
* @param oneIndex
* satu indeks
* @param anotherIndex
* indeks lain
* @param array
* array yang akan ditukar
* @pengecualian NullPointerException
* jika arraynya nol
*/
public static <T extends Comparable<T>> void swap(int oneIndex,
int indeks lain, T[] larik) {
jika (array == nol) {
throw new NullPointerException("input nilai nol");
}
checkIndexs(oneIndex, anotherIndex, array.length);
T suhu = array[satuIndeks];
array[satuIndeks] = array[Indeks lain];
array[Indeks lain] = suhu;
}
/**
* Tukar elemen derek array
*
* @param oneIndex
* satu indeks
* @param anotherIndex
* indeks lain
* @param array
* array yang akan ditukar
* @pengecualian NullPointerException
* jika arraynya nol
*/
pertukaran kekosongan statis publik(int oneIndex, int anotherIndex, int[] array) {
jika (array == nol) {
throw new NullPointerException("input nilai nol");
}
checkIndexs(oneIndex, anotherIndex, array.length);
int temp = array[satuIndeks];
array[satuIndeks] = array[Indeks lain];
array[Indeks lain] = suhu;
}
/**
* Periksa indeks apakah sudah di atur
*
* @param oneIndex
* satu indeks
* @param anotherIndex
* indeks lain
* @param panjang array
* panjang Array
* @pengecualian IllegalArgumentException
* jika indeks berada di luar rentang
*/
checkIndex kekosongan statis pribadi (int oneIndex, int anotherIndex,
int panjang array) {
if (satuIndex < 0 || anotherIndex < 0 || oneIndex >= arrayLength
||.Indeks lain >= Panjang array) {
melempar IllegalArgumentException baru(
"argumen ilegal untuk indeks derek [" + oneIndex + ","
+ satuIndeks + "]");
}
}
}
Pengurutan penyisipan langsung, InsertionSortord:
Copy kode kodenya sebagai berikut:
paket com.meritit.sortord.insertion;
/**
* Urutan penyisipan, kompleksitas waktu adalah O(n2)
*
* @penulis ysjian
* @versi 1.0
* @email [email protected]
* @QQ 646633781
*@telepon 18192235667
* @csdnBlog http://blog.csdn.net/ysjian_pingcx
* @createTime 31-12-2013
* @copyRight Kelebihan
* @sejak 1.5
*/
PenyisipanSortord kelas publik {
private static final InsertionSortord INSTANCE = new InsertionSortord();
pribadi InsertionSortord() {
}
/**
* Dapatkan instance InsertionSortord, hanya satu instance saja
*
* @return satu-satunya contoh
*/
publik statis InsertionSortord getInstance() {
kembalikan INSTAN;
}
/**
* Urutkan array <code>int</code> dengan urutan penyisipan
*
* @param array
* array int
*/
public void doSort(int... array) {
if (array != null && array.panjang > 0) {
int panjang = array.panjang;
// sirkulasi dimulai dari 1, nilai indeks 0 adalah referensi
untuk (int i = 1; i < panjang; i++) {
jika (array[i] < array[i - 1]) {
// jika nilai pada indeks i lebih rendah dari nilai pada indeks i-1
int lowongan = i; // catat lowongan tersebut sebagai i
// tetapkan penjaga sebagai nilai pada indeks i
int penjaga = larik[i];
// sirkulasi kunci, dari indeks i-1,
untuk (int j = i - 1; j >= 0; j--) {
if (array[j] > penjaga) {
/*
* jika nilai indeks saat ini melebihi
* penjaga, lalu mundur, buat rekor baru
*lowongan sebagai j
*/
larik[j + 1] = larik[j];
lowongan = j;
}
}
// atur penjaga ke lowongan baru
array[lowongan] = penjaga;
}
}
}
}
/**
* Urutkan array <code>T</code> generik dengan urutan penyisipan
*
* @param array
* array generik
*/
public <T extends Sebanding<T>> void doSortT(T[] array) {
if (array != null && array.panjang > 0) {
int panjang = array.panjang;
untuk (int i = 1; i < panjang; i++) {
if (array[i].compareTo(array[i - 1]) < 0) {
T penjaga = larik[i];
int lowongan = i;
untuk (int j = i - 1; j >= 0; j--) {
if (array[j].compareTo(penjaga) > 0) {
larik[j + 1] = larik[j];
lowongan = j;
}
}
array[lowongan] = penjaga;
}
}
}
}
}
Tes TesInsertionSortord:
Copy kode kodenya sebagai berikut:
paket com.meritit.sortord.insertion;
import java.util.Array;
/**
* Uji urutan penyisipan
*
* @penulis ysjian
* @versi 1.0
* @email [email protected]
* @QQ 646633781
*@telepon 18192235667
* @createTime 31-12-2013
* @copyRight Kelebihan
*/
kelas publik TestInsertionSortord {
public static void main(String[] args) {
InsertionSortord insertSort = InsertionSortord.getInstance();
int[] larik = { 3, 5, 4, 2, 6 };
Sistem.keluar.println(Array.toString(array));
insertSort.doSort(array);
Sistem.keluar.println(Array.toString(array));
Sistem.keluar.println("---------------");
Bilangan bulat[] larik1 = { 3, 5, 4, 2, 6 };
Sistem.keluar.println(Arrays.toString(array1));
insertSort.doSortT(array1);
Sistem.keluar.println(Arrays.toString(array1));
}
}