【数据结构】第八章-希尔排序

希尔排序属于不稳定排序算法,仅可适用于顺序表,不适用于链表。

希尔排序基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 =1( …。总之,记住先局部插入排序,逐步整体插入排序。

时间复杂度:最好 O(n1.3)、最坏 O(n2)

空间复杂度:O(1)


C++代码实现:

#include<iostream>
using namespace std;
/**
2.希尔排序
**/
// 自定义增量d=n/l
void ShellSort(int a[], int n, int l=2); 

int main() {
	int a[]={1,9,6,2,3,8};
	int n=6;
	ShellSort(a, n);
	for(int i=0;i<n;i++) {
		cout << a[i];
	}
}

void ShellSort(int a[], int n, int l) {
	int d,i,j;
	for(d=n/l;d>=1;d=d/l)
		for(i=d;i<n;i++)
			if(a[i]<a[i-d]) {
				int temp=a[i];
				for(j=i-d;j>=0&&a[j]>temp;j-=d) {
					a[j+d]=a[j];
					a[j]=temp;
				}
			}
} 

往期回顾

  1. 插入排序

猜你喜欢

转载自blog.csdn.net/m0_53129012/article/details/118255218