Shell sort is a generalization of insertion sort that allows exchanges of elements far apart in an array. It was created by Donald Shell in 1959 and works by making multiple passes with step sizes to sort subsets of the full list, improving on insertion sort's efficiency. Shell sort breaks the quadratic time barrier of other simple sorts but is still slower than other modern algorithms like quicksort.