Penyortiran bukit bekerja dengan baik untuk penyortiran array berukuran sedang hingga beberapa ribu item data. Penyortiran bukit tidak secepat penyortiran cepat dan algoritma pengurutan lainnya dengan kompleksitas waktu O(n*logn). bukan pilihan optimal untuk menyortir file yang sangat besar, tetapi penyortiran bukit jauh lebih cepat daripada penyortiran pilihan dan penyortiran penyisipan, yang memiliki kompleksitas waktu O(n²), dan sangat mudah diterapkan serta kodenya pendek.
Penyortiran bukit juga merupakan jenis penyisipan. Dalam penyortiran penyisipan, jika angka terkecil ada di akhir, maka akan ada terlalu banyak salinan. Hill memecahkan masalah ini. Ini juga merupakan penyortiran n-inkremental elemen dalam penyortiran penyisipan, dan melakukan penyortiran penyisipan di antara elemen-elemen yang berjarak, ketika item data ini diurutkan satu kali, algoritma pengurutan Hill mengurangi jarak antar item data dan kemudian mengurutkannya, dan seterusnya. Jarak antar item data saat melakukan pengurutan ini disebut kenaikan, dan biasanya dilambangkan dengan huruf h.
Untuk array yang akan diurutkan berdasarkan Hill, interval awalnya harus lebih besar, kemudian intervalnya harus terus dikurangi hingga intervalnya menjadi 1.
Urutan pengatur jarak:
Kualitas angka-angka dalam urutan spasi sering dianggap penting - mereka tidak memiliki pembagi umum selain 1. Kendala ini membuat lebih mungkin bahwa setiap tahap pengurutan akan mempertahankan efek dari tahap sebelumnya. Untuk urutan spasi yang berbeda, ada yang absolut syaratnya adalah interval penurunan bertahap akhirnya harus sama dengan 1. Oleh karena itu, lintasan terakhir adalah penyisipan biasa.
Contoh yang tercantum di bawah ini berasal dari aturan h=h*3+1:
paket com.jll.sort; kelas publik ShellSort { int[] arr; ukuran int; public ShellSort() { super(); } public ShellSort(ukuran int) { ini.ukuran = ukuran; } /** * @param args */ public static void main(String[] args) { ShellSort ss = new ShellSort(10); i=0;i<10;i++){ ss.arr[i] = (int) ((Matematika.acak()*100)+1); Sistem.keluar.print(ss.arr[i]+" " ); } ss.shellSort(); Sistem.keluar.println(); Sistem.keluar.println("setelah pengurutan:"); for(int i=0;i<10;i++){ System.out.print(ss.arr[i]+" "); } public void shellSort(){ int h = 1; while(h<=size/3){ h = h*3+1; (;h>0;h=(h-1)/3){ for(int i=h;i<ukuran;i++){ int temp = arr[i]; int j = i; sementara(j>h-1&&arr[jh]>temp){ arr[j]=arr[jh]; j-=h; } arr[j]=temp;