Shell排序

希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 DL. Shell 于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

程序实现

  • Python
def shell_sort(nums):
    gap = len(nums)//2
    while gap >0:
        for i in range(gap,len(nums),gap):
            for j in range(i,gap-1,-gap):
                if nums[j] < nums[j-gap]:
                    nums[j],nums[j-gap] = nums[j-gap],nums[j]
                else:
                    break
        gap = gap//2
    return nums
  • C++
void shell_sort(int nums[],int n){
    int gap = n/2;
    while (gap){
        for (int i=gap;i<n;i+=gap){
            for (int j=i;j>gap-1;j-=gap){
                if (nums[j]<nums[j-gap]){
                    swap(nums[j],nums[j-gap]);
                }
                else{
                    break;
                }
            }
        }
        gap = gap/2;
    }
}

复杂度和稳定性

  • 时间复杂度为:O(n^1.3 ),最坏时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 稳定性:不稳定