Kompleksitas waktu pengurutan bukit adalah O(n*log2n) dan kompleksitas ruang adalah O(1).
Ide: Penyortiran bukit juga merupakan metode penyortiran penyisipan, yang sebenarnya merupakan metode penyisipan pengelompokan. Pertama, tentukan bilangan bulat d1 kurang dari n sebagai pertambahan pertama, bagi semua record dalam tabel ke dalam grup d1, masukkan semua record yang jaraknya merupakan kelipatan d1 ke dalam grup yang sama, dan kemudian lakukan penyortiran penyisipan langsung dalam setiap grup; , ambil kenaikan kedua d2 (<d1), ulangi pengelompokan dan pengurutan di atas, hingga kenaikan yang diambil dt=1 (dt<dt-1<...<d2<d1), yaitu semua record ditempatkan di grup yang sama sampai penyisipan langsung dilakukan.
Copy kode kodenya sebagai berikut:
void ShellSort(int* data,int panjang)
{
jika( data == NULL || panjang <= 0 )
kembali;
int d = panjang/2; //ukuran langkah
sementara(d)
{
for(int i = 0; i < d; ++i) //Bagi menjadi beberapa grup sesuai dengan ukuran langkah, dan masukkan sortir setiap grup
{
//Penyortiran penyisipan
untuk(int j = i+d; j <panjang ; j +=d )
{
jika(data[j] < data[j -d])
{
int suhu = data[j]; //penjaga
int k = jd;
untuk(; k >=0&& suhu < data[k]; k -=d)
{
data[k+d] =data[k];
}
data[k+d] =temp;
}
}
}
d = hari/2;
}
}