การเรียงลำดับ Hill ทำงานได้ดีสำหรับการเรียงลำดับอาเรย์ขนาดกลางที่มีข้อมูลมากถึงหลายพันรายการ ไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับการจัดเรียงไฟล์ที่มีขนาดใหญ่มาก แต่การเรียงลำดับแบบ Hill นั้นเร็วกว่าการเรียงลำดับแบบเลือกและการเรียงลำดับแบบแทรกซึ่งมีเวลาที่ซับซ้อนเท่ากับ O(n²) และใช้งานง่ายมากและโค้ดก็สั้น
การเรียงลำดับแบบ Hill เป็นการเรียงลำดับแบบแทรก หากจำนวนที่น้อยที่สุดอยู่ท้ายสุด แสดงว่ามีจำนวนสำเนามากเกินไป นอกจากนี้ยังเป็นการเรียงลำดับแบบไม่เพิ่มหน่วยอีกด้วย องค์ประกอบในการเรียงลำดับการแทรก และการดำเนินการเรียงลำดับการแทรกระหว่างองค์ประกอบระยะห่างเหล่านี้ เมื่อรายการข้อมูลเหล่านี้ถูกจัดเรียงครั้งเดียว อัลกอริธึมการเรียงลำดับ Hill จะลดระยะห่างระหว่างรายการข้อมูล แล้วเรียงลำดับลง และอื่นๆ ระยะห่างระหว่างรายการข้อมูลเมื่อดำเนินการเรียงลำดับเหล่านี้เรียกว่าการเพิ่มขึ้น และแสดงตามอัตภาพด้วยตัวอักษร h
สำหรับอาร์เรย์ที่กำลังจะเรียงลำดับตาม Hill ช่วงเวลาเริ่มต้นควรมากขึ้น และจากนั้นควรลดช่วงเวลาอย่างต่อเนื่องจนกว่าช่วงเวลาจะกลายเป็น 1
ลำดับตัวเว้นวรรค:
คุณภาพของตัวเลขในลำดับการเว้นระยะมักถือว่ามีความสำคัญ เนื่องจากไม่มีตัวหารร่วมกันนอกจาก 1 ข้อจำกัดนี้ทำให้มีแนวโน้มมากขึ้นที่แต่ละรหัสผ่านการเรียงลำดับจะคงผลของรหัสผ่านก่อนหน้าไว้ สำหรับลำดับการเว้นระยะที่ต่างกัน จะมีค่าสัมบูรณ์ เงื่อนไขคือช่วงที่ค่อยๆ ลดลงในที่สุดจะต้องเท่ากับ 1 ดังนั้น การส่งผ่านครั้งสุดท้ายจึงเป็นการเรียงลำดับการแทรกแบบธรรมดา
ตัวอย่างที่แสดงด้านล่างได้มาจากกฎ h=h*3+1:
แพ็คเกจ com.jll.sort; ShellSort คลาสสาธารณะ { int[] arr; } /** * @param args */ โมฆะสาธารณะ main (String [] args) { ShellSort ss = new ShellSort (10); for (int i=0;i<10;i++){ ss.arr[i] = (int) ((Math.random()*100)+1); System.out.print(ss.arr[i]+" " } ss.shellSort(); System.out.println(); System.out.println("หลังการเรียงลำดับ:"); for(int i=0;i<10;i++){ System.out.print(ss.arr[i]+" "); } } โมฆะสาธารณะ shellSort(){ int h = 1; while(h<=size/3){ } สำหรับ (;h>0;h=(h-1)/3){ for(int i=h;i<size;i++){ int temp = arr[i]; ในขณะที่(j>h-1&&arr[jh]>temp){ arr[j]=arr[jh]; } arr[j]=temp;